我会提前道歉,但我不确定如何确切地说出这个问题。
我有一段目前工作正常的代码,其唯一目的是找到唯一标识符的所有组合。这样做很好,但我要做的是创建一个真正使组合独特的迭代。
我的意思是下面,你会看到一段简单的代码。将HashSet添加到列表中。然后你会看到一个创建新Hashset列表的方法。我知道如果我能在每个HashSet中订购什么,那么它将使它自己独一无二。
static void Main(string[] args)
{
List<HashSet<int>> myInts = new List<HashSet<int>>();
myInts.Add(new HashSet<int>{1, 2});
myInts.Add(new HashSet<int>{2, 1});
}
private static List<HashSet<int>> RemoveDuplicates(List<HashSet<int>> hash)
{
List<HashSet<int>> returnSet = new List<HashSet<int>>();
for (int i = 0; i < hash.Count; i++)
{
//do the order here and add it to the return set
}
return returnSet;
}
所以代码是正确的,1,2与2,1不同,但在我的对象中它们是相同的组合。所以我的过程就是如果我可以对数组进行排序,那么HashSet将使其独特,因为两者都是1,2
答案 0 :(得分:0)
您无需订购商品,可以使用SetEquals
检查商品是否包含相同的元素。
private static List<HashSet<int>> RemoveDuplicates(List<HashSet<int>> hash)
{
List<HashSet<int>> returnSet = new List<HashSet<int>>();
for (int i = 0; i < hash.Count; i++)
{
var isDupe = false;
//do the order here and add it to the return set
for (int j = i + 1; j < hash.Count; j++)
{
if(hash[i].SetEquals(hash[j]))
{
isDupe = true;
break;
}
}
if (!isDupe)
{
returnSet.Add(hash[i]);
}
}
return returnSet;
}
这是相当昂贵的,假设SetEquals
是O(n)并且你有k套,那将是O(n * k 2 )