【问题标题】:Check if two collections are equal [duplicate]检查两个集合是否相等[重复]
【发布时间】:2011-10-10 14:55:15
【问题描述】:

可能重复:
Is there a built-in method to compare collections in C#?
Comparing two collections for equality

我有两个集合,我想检查其中包含的值是否不是 eqaul。

   SearchResultCollection Users1 = ds1.FindAll();
   SearchResultCollection Users2 = ds2.FindAll();

接下来我使用 2 个 foreach 循环进行迭代,然后分配变量。

foreach (SearchResult users in Users1)
{
   string ManagerID = users.Properties["OrgUnitManagerName"][0].ToString();
   string subGroup = users.Properties["EmployeeSubGroup"][0].ToString();
   string cn = users.Properties["cn"][0].ToString();

   foreach (SearchResult user in Users2)
   {
     string uid = absaUser.Properties["uid"][0].ToString();
   }
}

我想要做的是:检查来自 User1 的哪些用户不存在于 user2 中并打印出该列表。

if(cn != uid)
  {
  }

这似乎不起作用。 有什么想法吗?

【问题讨论】:

标签: c# collections foreach


【解决方案1】:
  1. 检查它们的记录数是否相同,如果不是则退出
  2. 发送list1.Except(list2) - 如果有任何结果,请退出

否则 - 成功,他们匹配

注意:这使用了 LINQ 扩展方法Except,请参见此处:http://msdn.microsoft.com/en-us/library/bb300779.aspx。简单地说,list1.Except(list2) 提供了list1 中的所有项目,list2 中的项目除外。

对象需要实现Equals 才能正确比较相等性。

【讨论】:

    【解决方案2】:

    使用

    bool AreIdentical = (Users1.Count == Users2.Count ) && (Users1.Except (Users2).Count() == 0) && (Users2.Except (Users1).Count() == 0);
    

    编辑 - 根据 cmets:

    仅在 User1 中获取 User 而不是在 User2 中使用:

    var In1ButNotIn2 = Users1.Except (Users2);
    

    【讨论】:

    • "我要做的是:检查来自 User1 的哪些用户不存在于 user2 中并打印出该列表。"
    • 好的,基本上我的回答就是这样,但 5 分钟后。好的
    猜你喜欢
    • 2012-03-26
    • 2013-10-07
    • 2015-08-21
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2011-08-09
    • 2020-02-12
    • 2012-10-10
    相关资源
    最近更新 更多