【问题标题】:Is this suitable for Linq GroupBy? [duplicate]这适合 Linq GroupBy 吗? [复制]
【发布时间】:2011-08-03 03:30:29
【问题描述】:

我有一本字典:

      Dictionary<Project,List<User>> dictionary,

每个项目都有一组用户。

我想检索组织这些数据,以便将具有相似用户的所有项目排列成这种数据结构:

      List<Tuple<List<Project>,List<User>>>

我什至不知道从哪里开始。我已经为此奋斗了好几天。

【问题讨论】:

  • 对于相似的用户,您的意思是项目在其子集合中具有相同的用户?
  • 是的,我就是这个意思。在继承子集合中具有相同用户的项目。

标签: c# .net linq


【解决方案1】:

用户列表是您应该分组的关键。在GroupBy() 中,您可以使用这样的比较器:

public class ListComparer<T> : IEqualityComparer<List<T>>
    where T : IComparable<T>
{
    public bool Equals(List<T> x, List<T> y)
    {
        return x.OrderBy(u => u).SequenceEqual(y.OrderBy(u => u));
    }

    public int GetHashCode(List<T> obj)
    {
        return obj.GetHashCode();
    }
}

顺便说一句:比较器是在 Lists 上而不是在 IEnumerables 上,否则对于每次比较,都应该一遍又一遍地枚举比较对象。

【讨论】:

  • 您可能想关注this thread 以获得更强大的比较器。
  • 我想删除这个答案,因为它不好。但它已被接受,因此无法删除。 GetHashCode 方法没有意义。它应该匹配 Equals 方法,但它不匹配。
【解决方案2】:

最好的办法是展平dictionary 的内容并对其进行查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多