gpt4 book ai didi

c# - IEnumerable> - 没有重复的 IEnumerable

转载 作者:行者123 更新时间:2023-11-30 19:00:10 29 4
gpt4 key购买 nike

我正试图找到解决这个问题的办法:

给定一个 IEnumerable< IEnumerable< int>> 我需要一个返回输入的方法/算法,但是如果多个 IEnumerable< 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
};

“foreach seq in seqs”.. 产生 {#0,#1,#2} 或 {#0,#2,#3}

我可以和..一起去吗

.. 一些聪明的 IEqualityComparer

.. 一些我还没有想出的聪明的 LINQ 组合 - groupby,sequenceequal ..?

.. 一些 seq->HashSet 的东西

.. 什么不是。任何事情都会有帮助

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

最佳答案

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

var result = seqs.Select(x => new HashSet<int>(x))
.Distinct(HashSet<int>.CreateSetComparer());

鉴于您希望将元素视为集合,您应该以这种方式开始,IMO。

当然,如果您想在返回的序列中保持顺序,这将无济于事,您只是不介意返回哪个相等的集合...上面的代码将返回 IEnumerable<HashSet<int>>在每个序列中将不再有任何排序。 (集合 的返回顺序也无法保证,尽管它们不按照先见先返回的原则返回会很奇怪。)

感觉不太可能这还不够,但如果您能提供更多关于您真正需要实现的目标的详细信息,那将更容易提供帮助。

如评论中所述,这还将假设每个原始源数组没有重复项......或者至少,它们是不相关的,所以你很乐意对待{ 1 } 和 { 1, 1, 1, 1 } 相等。

关于c# - IEnumerable<IEnumerable<int>> - 没有重复的 IEnumerable<int>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4708362/

29 4 0