IEnumerable <IEnumerable <int >> - 没有重复的IEnumerable <int> s

Mob*_*erg 2 c# linq ienumerable

我正在尝试找到解决此问题的方法:

给定一个IEnumerable <IEnumerable <int >>我需要一个返回输入的方法/算法,但是如果有几个具有相同元素的IEnmerable <int>,则每个巧合/组只返回一个.

恩.

    IEnumerable<IEnumerable<int>> seqs = new[]
    { 
        new[]{2,3,4}, // #0 
        new[]{1,2,4}, // #1 - equals #3
        new[]{3,1,4}, // #2
        new[]{4,1,2}  // #3 - equals #1
    };
Run Code Online (Sandbox Code Playgroud)

"foreq seq in seqs"..产生{#0,#1,#2}或{#0,#2,#3}

我可以去..

..一些聪明的IEqualityComparer

..一些聪明的LINQ组合我还没弄明白 - groupby,sequenceequal ..?

..一些seq-> HashSet的东西

什么不是.一切都会有所帮助

我将能够通过良好的编程解决它,但灵感总是受到赞赏.

Jon*_*eet 7

这是digEmAll的一个稍微简单的版本答案:

var result = seqs.Select(x => new HashSet<int>(x))
                 .Distinct(HashSet<int>.CreateSetComparer());
Run Code Online (Sandbox Code Playgroud)

鉴于你想要将元素视为集合,你应该让它们以IMO开头.

当然,如果你想在返回的序列中保持顺序,这将无济于事,你只是不介意返回哪些相等的集合......上面的代码将返回一个IEnumerable<HashSet<int>>不再有任何排序的代码每个序列.(也不保证返回集合的顺序,尽管它们在首先看到的第一次返回的基础上不返回会很奇怪.)

这不太可能是不够的,但如果你能提供你真正需要实现的更多细节,那将更容易提供帮助.

正如在评论中指出,这也将假定有没有重复每个原始源阵列......至少,他们是不相关的,所以你很高兴治疗{1}和{1,1,1, 1}同等.