我决定按照字符串的长度对集合进行分组。需要你的建议来纠正自己。
string[] collection = {"five","four","ten","one"};
var groupedValues =
from w in collection
group w by w.Length into getByGroup
select getByGroup;
foreach (var g in groupedValues)
{
Console.WriteLine(g);
}
输出结果为:
... System.Linq.Lookup
... System.Linq.Lookup
出了什么问题?
答案 0 :(得分:2)
GroupBy返回一个Lookup对象,其中包含Key和分组中的集合。
foreach (var g in GroupedValues)
{
Console.WriteLine("There are {1} strings of length {0}.", g.Key, g.Count());
foreach (var v in g)
{
Console.WriteLine(" - {0}", v);
}
}
答案 1 :(得分:1)
出了什么问题取决于你想做什么!
分组后返回的序列不是原始对象的平坦序列(因此在您的情况下,它不是字符串序列)。否则它们将如何分组?
也许鉴于你显然希望得到一个扁平的字符串列表,你实际上想要按长度排序:
var collection = new[] {"five","four","ten","one"};
var byLength = collection.OrderBy(s => s.Length);
foreach (var s in GroupedValues)
Console.WriteLine(s);
或者如果你想对它们进行分组,那么你必须依次处理每个组,每个组都是一个单独的字符串列表:
foreach (var g in GroupedValues)
{
Console.WriteLine("Strings of length " + g.Key + ":");
foreach (var s in g)
Console.WriteLine(" " + s);
}