2

我有一个字符串列表,例如

A01,B01 ,A02, B12, C15, A12,  ... 

我想将列表展开为列表列表或列表字典,以便
以相同字母开头的所有字符串组合在一起(使用 linq)

A -> A01 , A02 , Al2
B -> B01 , B12
C -> C15

或者

    A -> 01 , 02 , l2
    B -> 01 , 12
    C -> 15

现在我只是使用 for 循环迭代列表并将值从字典中添加到 appprop 列表中。

(可能不对!)

   Dictionary<string, List<string>> dict = new Dictionary<string, List<string>>();

         foreach( string str in stringList)
         {
            string key = str.Substring(0,1);
            if (!dict.ContainsKey(key)){
                dict[key] = new List<string>();
            }

            dict[key].Add(str);
         }

编辑
哦,对不起,我忘了添加这个,我有一个类别 objs 列表,这些是类别名称。
我需要检索类似的东西Dictionary<string, List<Category>>,以后我想将它绑定到一个嵌套列表。(asp.net/mvc)

有没有更好的方法来使用 Linq 做同样的事情?

4

3 回答 3

5

听起来你想要一个Lookup, 通过ToLookup扩展方法:

var lookup = stringList.ToLookup(x => x.Substring(0, 1));

查找可以让你做几乎任何你可以用字典做的事情,但它在构建后是不可变的。哦,如果你要求一个缺失的键,它会给你一个空序列而不是一个错误,这会很有帮助。

于 2012-11-10T17:24:59.123 回答
1

来自聊天室,试试这个。我知道这不是最优雅的解决方案,可能有更好的解决方案。

List<string> listOfStrings = {"A01", "B01", "A02", "B12", "C15", "A12"}.ToList();


var res = listOfStrings.Select(p => p.Substring(0, 1)).Distinct().ToList().Select(p => 
new {
       Key = p,
       Values = listOfStrings.Where(c => c.Substring(0, 1) == p)
}).ToList();

foreach (object el_loopVariable in res) {
     el = el_loopVariable;
     foreach (object x_loopVariable in el.Values) {
         x = x_loopVariable;
         Console.WriteLine("Key: " + el.Key + " ; Value: " + x);
     }
}

Console.Read();

给出以下输出:

在此处输入图像描述

于 2012-11-10T19:56:36.657 回答
0

如果你想使用字典,你可能想要这个

       List<String> strList = new List<String>();
        strList.Add("Axxxx");
        strList.Add("Byyyy");
        strList.Add("Czzzz");
        Dictionary<String, String> dicList = strList.ToDictionary(x => x.Substring(0, 1));
        Console.WriteLine(dicList["A"]);
于 2012-11-10T17:44:36.533 回答