2016-11-04 61 views
0

如果我有喜欢收藏:LINQ遍历集合和增量追加到匹配值

var list = new List<string>() 
    { 
     "one", 
     "one", 
     "two", 
     "two", 
     "three" 
    }; 

是有可能得到的结果类似下面使用LINQ?

“一1”,“一2”,“两-1”,“双2”,“三”

我试图让重复的值和连续的数字追加到他们做他们独特的

|编辑

我LinqPad这样做,似乎是正确的......

Dictionary<string,string> names = new Dictionary<string,string>(){ 

    {"val1","text1"}, 
    {"val2","text1"}, 
    {"val3","text2"}, 
    {"val4","text3"}, 
    {"val5","text3"} 

}; 

var filteredNames = names.GroupBy (x => x.Value).ToDictionary(x => x.Key, x => x.Select((i, index) => i.Value + index.ToString())); 

建议欢迎!

+0

你的问题有点混乱,你可以编辑它,并使其更清楚。 –

+0

如果可以,你不明白哪个部分? – DavidB

+0

好吧,一个令人困惑的事情似乎是你的问题说,你是从一个列表开始,然后你有一些示例代码,以字典开头... – Chris

回答

1

从你应该做的启动列表如下:

var filteredNames = list.GroupBy (x => x).SelectMany((i, index) => i.Value + "-" + index.ToString()); 

从字典您的解决方案是正确的开始,但如果你想作为一个结果列表,你应该做如下:

var filteredNames = names.GroupBy (x => x.Value).SelectMany((i, index) => i.Value + "-" + index.ToString()); 
+0

这看起来像它不会保留排序,如果这是相关的。 – Chris

+0

第一个似乎不是一个正确的解决方案,不会有任何'i.Value',也SelectMany会产生'IEnumerable ',而不是'IEnumerable ' –

0

检查之后,将提供准确的预期结果,也将保留订单,因为它列举(Linqpad代码):

// Grouping 
var resultGroup = list.GroupBy(x => x); 

// Enumeration 
foreach (var grp in resultGroup) 
{ 
    if(grp.Count() == 1) 
     grp.Key.Dump(); 
    else 
    { 
     int counter = 0; 
     foreach (var index in grp) 
     { 
      counter++; 
      (grp.Key + "-" + counter).Dump(); 
     } 
    } 
}