【发布时间】:2012-08-02 15:19:02
【问题描述】:
我知道如何使用匿名类型按固定的值列表进行分组。我想做的是按一组实际值分组。
例如,这个表达式的结果是2。
new List<HashSet<int>> {
new HashSet<int> { 4 },
new HashSet<int> { 4 }
}.GroupBy (x => x).Count()
我正在寻找一种将这些集合放在同一组中的方法,以便结果为 1。在 python 中,这将使用frozenset 来完成。
这样做最干净的方法是什么?
【问题讨论】:
-
您不想分组。您需要使用 SelectMany
-
所以你希望这个表达式的结果是 1?
-
您是想将散列集中的元素组合成一个散列集,还是要组合所有相似的散列集?这里的区别不是很清楚。如果您想将所有哈希集组合成一个,请使用@AmiramKorach 指出的
SelectMany。如果要按哈希集本身进行分组,则需要为 Hashset提供 IEqualityComparer实现:msdn.microsoft.com/en-us/library/bb534334 -
@AmiramKorach:我没有尝试计算联合,而是尝试通过基于哈希集的键对一组对象进行分组。感谢大家的投入。
HashSet<T>.CreateSetComparer正是我想要的。