2012-05-03 74 views
2

我有一个字符串列表的列表构建一个解释看起来是这样的:使用LINQ to从分隔字符串

abc|key1|486997 
def|key1|488979 
ghi|key2|998788 
gkl|key2|998778 
olz|key1|045669 

如何使用LINQ和ToDictionary产生Dictionary<string, List<string>>看起来像

key1 : { abc|key1|486997, def|key1|488979, olz|key1|045669 } 
key2 : { ghi|key2|998788, gkl|key2|998778 } 

基本上我希望能够提取第二个元素作为关键用途ToDictionary()在一个全面创建字典。

目前,我正在做这个..

var d = new Dictionary<string, List<string>>(); 

      foreach(var l in values) 
      { 
       var b = l.Split('|'); 
       var k = b.ElementAtOrDefault(1); 

       if (!d.ContainsKey(k)) 
        d.Add(k, new List<string>()); 

       d[k].Add(l); 
      } 

我已经看到了从分隔值的单串建设字典的问题,但我 知道是否有一个优雅的方式来做到这一点当从一个分隔字符串列表开始时。

+0

可能重复:http://stackoverflow.com/questions/10400213/using-linq-to-read-key-value-pa ir-from-configuration-file – SupremeDud

回答

4
var list = new [] 
{ 
"abc|key1|486997", 
"def|key1|488979", 
"ghi|key2|998788", 
"gkl|key2|998778", 
"olz|key1|045669" 
}; 

var dict = list.GroupBy(x => x.Split('|')[1]) 
       .ToDictionary(x => x.Key, x => x.ToList()); 

你也可以把它转换为查找(这是非常与之相似的Dictionary<K,IEnumerable<V>>)一个炮打响:

var lookup = list.ToLookup(x => x.Split('|')[1]); 
+0

谢谢!这是我最终弄清楚的。 – duckus

1

如果你的数据是保证这样的一致,你可以做这样的事情:

var data = new[] 
       { 
        "abc|key1|486997", 
        "def|key1|488979", 
        "ghi|key2|998788", 
        "gkl|key2|998778", 
        "olz|key1|045669" 
       }; 
var items = data 
      .GroupBy(k => k.Split('|')[1]) 
      .ToDictionary(k => k.Key, v => v.ToList()); 
1
var data = new[] 
       { 
        "abc|key1|486997", 
        "def|key1|488979", 
        "ghi|key2|998788", 
        "gkl|key2|998778", 
        "olz|key1|045669" 
       }; 
var dictionary = data.Select(row => row.Split('|')) 
    .GroupBy(row => row[1]) 
    .ToDictionary(group => group.Key, group => group); 
+0

这将返回一个'Dictionary >' – vcsjones

+0

@vcsjones是的,是的。 OP没有指定所需的类型,所以我们不知道他将如何使用它。 – Servy

+1

引用OP:*如何使用LINQ和ToDictionary生成** Dictionary > *** – vcsjones

相关问题