c#如何使用 linq 来比较和在一个列表中的重复字符串替换

标签: Linq C#
发布时间: 2017/2/28 21:05:01
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我想要检查通过拆分字符串中删除重复 ; ,但我不知道如何去做下一步
我像这样的代码︰

    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 [] 数组而不是列表,返回 (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++;
    }

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

解决方法 1:

这是你的问题的解决方案︰

 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);
官方微信
官方QQ群
31647020