Fre*_*dou 2 .net c# linq vb.net
从此
(vb.net)
Dim test As New List(Of Integer())
test.Add(New Integer() {1, 2, 3})
test.Add(New Integer() {1, 3, 3})
test.Add(New Integer() {3, 2, 3})
test.Add(New Integer() {1, 1, 3})
test.Add(New Integer() {1, 2, 3})
Dim a = test.Distinct
Run Code Online (Sandbox Code Playgroud)
(C#)
List<int[]> test = new List<int[]>();
test.Add(new int[] { 1, 2, 3 });
test.Add(new int[] { 1, 3, 3 });
test.Add(new int[] { 3, 2, 3 });
test.Add(new int[] { 1, 1, 3 });
test.Add(new int[] { 1, 2, 3 });
var a = test.Distinct();
Run Code Online (Sandbox Code Playgroud)
不起作用,你会怎么做?
Distinct
在这种情况下,你必须提供一个自定义的Equality比较器- 否则你正在比较引用,这是一个初始尝试:
class SequenceComparer<T,U> : IEqualityComparer<T> where T: IEnumerable<U>
{
public bool Equals(T x, T y)
{
return Enumerable.SequenceEqual(x, y);
}
public int GetHashCode(T obj)
{
int hash = 19;
foreach (var item in obj)
{
hash = hash * 31 + item.GetHashCode();
}
return hash;
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以在你的电话中使用它Distinct()
:
var results = test.Distinct(new SequenceComparer<int[],int>())
.ToList();
Run Code Online (Sandbox Code Playgroud)