C# 从 List<string[]> 中删除重复项

标签 c# arrays list

我从数据库中得到了很多数据,这些数据是搜索功能的结果。现在我有一个 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/

相关文章:

java - 如何打乱从文本文件中随机选取的单词

arrays - 更新 redux 数组中的多个项目

python - 使用特定键合并两个(或更多)字典配对列表

c# - UseWindowsAzureActiveDirectoryBearerAuthentication 与 UseOpenIdConnectAuthentication 之间有什么区别?

c# - 如何从 .NET Core 3.1 中的 DI 获取 SignalR IHubContext?

php - 字符串到整数数组php

java - 尝试保持 ArrayList 不可变

python - 在python字典列表中查找最低值

c# - 在 C# 中处理退出无限循环的正确方法

c# - 从一个 Controller 调用方法到另一个 Controller 时 session 为空...MVC