如何使用 LINQ 比较和替换一个列表中的重复字符串

本文关键字:列表 一个 字符串 比较 LINQ 何使用 替换 | 更新日期: 2023-09-27 18:34:37

我想检查删除按;分割的字符串中的重复项,但我不知道下一步
该怎么做我的代码是这样的:

    string str = "PORTION G ON GROUND FLOOR;/n/nPORTION G ON GROUND FLOOR;/n/nabcdef1234;/n/nabcdef1234";
    List<string> unitList = new List<string>();
    foreach (string s in str.Replace("/n","").Split(';'))
    {
        unitList.Add(s);
    }
    if ((unitList.Distinct()).Count() == 1)
        Label1.Text=unitList.FirstOrDefault();
    else
    {
       //return more than 1 ,remove duplicate
       //replace duplicate by "-" or ""
    }

我的输出想要是:"PORTION G ON GROUND FLOOR;/n/n-;/n/nabcdef1234;/n/n-"

我发现如果我使用 string[] 数组而不是 List,返回(unitList.Distinct()).Count()是 2 而不是 1,我想知道是否有任何问题。
这是我的代码:

    string str = "PORTION G ON GROUND FLOOR;/n/nPORTION G ON GROUND FLOOR;/n/nPORTION G ON GROUND FLOOR";
    string[] unitList = new string[10];
    int i=0;
    foreach (string s in str.Replace("/n","").Split(';'))
    {
        unitList[i]=s;
            i++;
    }

我很高兴,感谢任何人帮助我解决它!!

如何使用 LINQ 比较和替换一个列表中的重复字符串

这是您问题的解决方案:

 string str = "PORTION G ON GROUND FLOOR;/n/nPORTION G ON GROUND FLOOR;/n/nabcdef1234;/n/nabcdef1234";
 List<string> selected=new List<string>();
 var result = str.Split(';').Select(s =>
                                       {
                                         var word = s.Replace("/n", "");
                                         if (selected.Contains(word))
                                         {
                                           return s.Replace(word,"")+"-";
                                         }
                                         else
                                         {
                                           selected.Add(word);
                                           return s;
                                         }
                                        }).Aggregate<string, string>(null, (current, item) => current + item);

此代码返回您期望的字符串。

但是如果你想要没有重复的单词列表,这是另一种获取它的方法:

var list = str.Split(';').ToLookup(s => s.Replace("/n", "")).Select(e=>e.Key);
 string str = "PORTION G ON GROUND FLOOR;/n/nPORTION G ON GROUND FLOOR;/n/nabcdef1234;/n/nabcdef1234";
            var list = str.Replace("/n", "").Split(';');
            var result = (from s in list
                group s by s
                into g
                select g.First()).ToList();
拆分数组

后,您可以按数组本身中的字符串进行分组,然后选择第一个字符串。

string str = "PORTION G ON GROUND FLOOR;/n/nPORTION G ON GROUND FLOOR;/n/nabcdef1234;/n/nabcdef1234";
            var temp =  str.Replace("/n", string.Empty).Split(';').Distinct();
            var result = string.Join("/n", temp);

希望它和你期望的一样