我有一个像
这样的字符串列表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循环迭代列表并将值添加到字典中的approp列表中。
(可能不对!)
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);
}
修改:
哦对不起,我忘了添加这个,
我有一个类别obj列表,这些是类别名称
我需要检索Dictionary<string, List<Category>>
之类的内容,我希望将其绑定到nested list。 (asp.net/ mvc)
使用Linq有更好的方法吗?
答案 0 :(得分:5)
听起来你想通过Lookup
扩展方法ToLookup
获得{{3}}:
var lookup = stringList.ToLookup(x => x.Substring(0, 1));
查找将让您可以对字典执行任何操作,但在构建之后它是不可变的。哦,如果你要求丢失钥匙,它会给你一个空序列而不是错误,这可能非常有帮助。
答案 1 :(得分: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();
提供以下输出:
答案 2 :(得分: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"]);