2014-12-19 46 views
0

我要检查删除重复的由;分割字符串,但我不知道该怎么做下一
我这样的代码:如何使用LINQ比较和在一个列表替换字符串重复

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++; 
    } 

我很高兴,并感谢任何人都可以帮我解决这个问题!

回答

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); 
+0

由于其同样的事情,它的工作原理。但你可以解释下部分为什么使用字符串数组将返回2而不是1 – bbqwings 2014-12-19 06:17:34

+0

我测试过,我的预期结果应该被删除'.aggregate()' – bbqwings 2014-12-19 06:36:02

+0

问题是你正在创建一个长度为10的数组,你只使用4个元素。 Distinct方法也将空值视为一个元素,这就是说您是一个额外的元素(具有空值)。为了避免这种情况,你可以这样做:string [] unitList = str.Replace(“/ n”,“”).Split(';') – octavioccl 2014-12-19 15:11:10

1
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(); 

你可以通过该数组本身之后,你把它分解,然后选择第一个在串组。

0
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); 

希望大家期待

相关问题