gpt4 book ai didi

c# - 单独收集 2 个不同的新系列

转载 作者:行者123 更新时间:2023-11-30 13:54:48 24 4
gpt4 key购买 nike

我有一组元素和一个额外的小集合作为过滤器。

我需要通过一些过滤器将它分离到 2 个新集合中。在我的例子中,第一个集合包含一些元素,另一个不包含元素。

这 2 个新系列中没有不存在的项目。

我是这样做的:

var collection1= baseCollection.Where(r => filterCollection.Contains(r.Property)).ToList();
var collection2= baseCollection.Where(r => !filterCollection.Contains(r.Property)).ToList();

但是有没有另一种,我希望更优雅的方式来分离集合?对我来说,这看起来像是“我重复自己”,使用几乎相同的代码 2 次。

最佳答案

  1. 您可以为该函数创建一个变量 - 这样您就不会“重复自己”(在这种情况下不会使用,下面有更好的选项,但仍然是一个选项):

    Func<YourClass,bool> filtering = (r) => filterCollection.Contains(r.Property);

    var collection1 = baseCollection.Where(r => filtering(r));
    var collection2 = baseCollection.Where(r => !filtering(r));
  2. 如果您的集合类型覆盖了EqualsGetHashCode,您可以使用Except:

    var collection1 = baseCollection.Where(r => filterCollection.Contains(r.Property));
    var collection2 = baseCollection.Except(collection1);
  3. 对给定的 IEqualityComparer 使用 Except (同时检查第一个评论以获取指南):

    public class Comparer : IEqualityComparer<YourClass>
    {
    public bool Equals(YourClass x, YourClass y)
    {
    // Your implementation
    }

    public int GetHashCode(YourClass obj)
    {
    // Your implementation
    }
    }

    var collection1 = baseCollection.Where(r => filterCollection.Contains(r.Property));
    var collection2 = baseCollection.Except(collection1, new Comparer());
  4. 您也可以使用 GroupBy (可能性能不太好):

    var result baseCollection.GroupBy(r => filterCollection.Contains(r.Property))
    .ToDictionary(key => key.Key, value => value.ToList());

    var collection1 = result[true];
    var collection2 = result[false];
  5. 否则另一种方法将只使用循环:

    List<YourType> collection1 = new List<YourType>();
    List<YourType> collection2 = new List<YourType>();
    foreach(var item in baseCollection)
    {
    if(filterCollection.Contains(item.Property))
    {
    collection1.Add(item);
    }
    else
    {
    collection2.Add(item);
    }
    }

关于c# - 单独收集 2 个不同的新系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39164858/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com