C# - 如何按最小到最大的顺序重新排列新的HashSet <int>

时间:2015-09-07 17:49:59

标签: c# collections hashset

我会提前道歉,但我不确定如何确切地说出这个问题。

我有一段目前工作正常的代码,其唯一目的是找到唯一标识符的所有组合。这样做很好,但我要做的是创建一个真正使组合独特的迭代。

我的意思是下面,你会看到一段简单的代码。将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

1 个答案:

答案 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