提问人:Char 提问时间:8/28/2023 最后编辑:Dmitry BychenkoChar 更新时间:8/28/2023 访问量:34
C# 使用 Linq [duplicate] 获取不同的整数子列表
C# Get distinct sub-list of ints using Linq [duplicate]
问:
这个问题在这里已经有答案了:
.NET C# - 数组中的非重复数组数(5 个答案).NET C# - Number of Distinct Arrays in an Array (5 answers)
3个月前关闭。
我有一个整数列表列表:为了简单起见,它有价值.如何使用 Linq 获取所有不同的子列表?在这种情况下,这只是.List<List<int>>
[[1, 2, 3], [1, 2, 3]]
[1, 2, 3]
我尝试了与配对,但没有运气。.Distinct()
.GroupBy(x => x)
.Select(x => x.First())
谢谢!
答:
0赞
Dmitry Bychenko
8/28/2023
#1
首先,您应该定义何时相等并实现相应的比较器。例如,如果我们假设List<int>
当且仅当列表包含相等的项目、订单和数量很重要时,列表才等于列表:
a
b
{1, 2, 3} == {1, 2, 3} != {2, 1, 3} != {1, 1, 2, 3}
我们可以想出
private sealed class MyComparer<T> : IEqualityComparer<IEnumerable<T>> {
public bool Equals(IEnumerable<T>? x, IEnumerable<T>? y) =>
(ReferenceEquals(x, y)) ? true
: x is null || y is null ? false
: x.SequenceEqual(y);
public int GetHashCode(IEnumerable<T> obj) => obj is null ? -1 : obj.Count();
}
那么你就可以了:Distinct
List<List<int>> list = ...
var result = list
.Distinct(new MyComparer<int>())
.ToList();
评论
Distinct
IEqualityComparer