我从数据库中得到了很多数据,这些数据是搜索功能的结果。现在我有一个 List<string[]>
其中有 string[]
类型的重复元素. string[]
列表中是搜索结果。
我知道每个新创建的数组都有不同的实例,所以我不能使用 MyListOfArrays.Distinct().ToList()
.
也许这是一个非常基本的问题......
我的问题是,是否有任何内置函数可以删除重复的 string[]
形成List<string[]>
?还是必须自己写?
谢谢
最佳答案
您可以使用带有自定义 equalityComparer 的 distinct
方法
IEnumerable<string[]> distinct = inputStringArrayList.Distinct(new EqualityComparer());
平等比较器
class EqualityComparer : IEqualityComparer<string[]>
{
public bool Equals(string[] x, string[] y)
{
if (x.Length != y.Length)
{
return false;
}
if (x.Where((t, i) => t != y[i]).Any())
{
return false;
}
return true;
}
public int GetHashCode(string[] obj)
{
return obj.GetHashCode();
}
}
替代等于方法
public bool Equals(string[] x, string[] y)
{
return x.SequenceEqual(y);
}
在这里,我假设您在同一索引处拥有完全相同的字符串数组,其中包含相同的内容。
来自 Matthew Watson 的更正
public int GetHashCode(string[] obj)
{
if (obj == null)
return 0;
int hash = 17;
unchecked
{
foreach (string s in obj)
hash = hash*23 + ((s == null) ? 0 : s.GetHashCode());
}
return hash;
}
关于C# 从 List<string[]> 中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19118598/