【发布时间】:2011-04-01 19:28:45
【问题描述】:
我有一个包含多个整数列表的 HashSet - 即HashSet<List<int>>
为了保持独特性,我目前必须做两件事:
1. 手动循环现有列表,使用SequenceEquals 查找重复项。
2. 对各个列表进行排序,使SequenceEquals 当前有效。
有没有更好的方法来做到这一点?是否有我可以提供给 HashSet 的现有 IEqualityComparer 以便 HashSet.Add() 可以自动处理唯一性?
var hashSet = new HashSet<List<int>>();
for(/* some condition */)
{
List<int> list = new List<int>();
...
/* for eliminating duplicate lists */
list.Sort();
foreach(var set in hashSet)
{
if (list.SequenceEqual(set))
{
validPartition = false;
break;
}
}
if (validPartition)
newHashSet.Add(list);
}
【问题讨论】:
-
在这里查看 Jon Skeet 的答案:stackoverflow.com/questions/1023424/…
-
您能否提供更多关于您实际尝试解决的问题的信息?
HashSet<List<int>>似乎不太可能使用。 -
@marcind,我用它来维护一个数字的所有因式分解的列表。所以对于 24,您可以拥有例如 {4, 2, 3} , {2, 2, 6}等等......我现在使用的算法会创建重复的集合,我希望我知道如何解决这个问题,但遗憾的是我不知道:-/
-
您可能想将其作为一个单独的问题提出。应该有比您目前尝试的更优雅的解决方案。
-
@CodeInChaos,是的,我绝对认为我应该这样做!任何解决方案都会比我现在遇到的混乱更优雅;-)
标签: c# collections hashset distinct-values