Linq删除重复忽略大小写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linq删除重复忽略大小写相关的知识,希望对你有一定的参考价值。

我有像这样的示例列表数据

var a = {Apple,Orange,WaterMelon,ApplE,Orange,APple}

我想删除该列表中的重复项并获取新列表。我的代码:

var b = a.GroupBy(x => x).Where(y => y.Count() >= 1).Select(z => z.Key).ToList();

但它又回来了

var b = {Apple,ApplE,APple,Orange,WaterMelon}

如何摆脱那种不同的情况?像excel中的过滤系统只能得到1个Apple。

答案

如果GroupBy,StringComparer实现了这个并提供标准的预配置选项,IEqualityComparer<T>接受一个实现:

a.GroupBy(x => x, StringComparer.OrdinalIgnoreCase).Select...

有多种选择,包括CurrentCultureIgnoreCaseInvariantCultureIgnoreCaseOrdinalIgnoreCase

更多细节:https://msdn.microsoft.com/en-us/library/system.stringcomparer.ordinalignorecase(v=vs.110).aspx

另一答案

这将根据套管过滤它:

// using System.Linq;

var a = new[]{"Apple", "Orange", "WaterMelon", "ApplE", "Orange", "APple"};
var b = a.Where(x => a.Count(i => i == x) == 1);

如果你想在不尊重套管的情况下得到它们:

using System.Linq;
using System;

public class Program
{
    public static void Main()
    {
        var a = new[]{"Apple", "Orange", "WaterMelon", "ApplE", "Orange", "APple"};
        var b = a.Where(x => a.Count(i => i.Equals(x, StringComparison.OrdinalIgnoreCase )) == 1);

        System.Console.WriteLine(string.Join(",", b));
    }
}

输出(区分大小写):

Apple,WaterMelon,ApplE,APple

输出(不敏感):

WaterMelon
另一答案

您可以使用字典将字符串添加为键,将字符串添加为值。

List<string> mylist = new List<string> { "app", "App", "zz", "zZ" };
            Dictionary<string, string> dict = new Dictionary<string, string>();
            string key = string.Empty;
            foreach(string c in mylist)
            {
                key = c.ToLower();
                if(!dict.Keys.Contains(key))
                {
                    dict.Add(key, c);
                }
            }
            var t = dict.Values;

以上是关于Linq删除重复忽略大小写的主要内容,如果未能解决你的问题,请参考以下文章

Discord bot忽略小写命令[重复]

使用 LINQ 从 ObservableCollection 源中删除元素 [重复]

使用 LINQ 删除列表中的项目 [重复]

shell的sort排序uniq重复行整理tr对字符集替换压缩删除

使用 linq 删除列表中的重复项

为啥sql比较忽略大小写[重复]