如何通过下一个键将两个不同的(第一个typeof years == IEnumerable<string>
和第二个typeof occurs = IEnumerable<int>
)序列分组为一个序列:如果occurs
中的数字相同,则按{{1 }},否则years
只使用occurs
订购?
我通过以下方式获得了这些序列:
LINQ
因此变量var years = some_strings.Select(x => x.Split(' ')[1]);
var occurs = years.Select(x => years.Count(e => e == x));
仅包含带有年份的字符串,years
包含第一个序列中相同年份的计数。
我无法理解occurs
中的这些技巧。
我会做这样的事吗?
LINQ
我应该在哪里使用第二个序列? 也许我可以在1个查询中获得这些序列然后处理它?</ p>
UPD
我使用匿名类(?)修改了我的2个查询:
occurs.GroupBy(x => x ???
因此,它有多年并且都在其中发生。
我正在尝试获取下一个字符串:
some_strings.Select(x => x.Split(' ')[1]).
GroupBy(x => x).
Select(x => new {num = x.Key, count = x.Count() })
现在,使用所需的值进行查询,如何将其排序为前述条款?
答案 0 :(得分:4)
你非常接近。这应该为您提供类似于最新更新的字符串列表:
var occurences
= years.GroupBy(x => x)
.Select(x => new { Year = int.Parse(x.Key), Count = x.Count() })
.OrderBy(x => x.Count)
.ThenBy(x => x.Year)
.Select(x => string.Concat(x.Count, " ", x.Year))
.ToList();
使用您创建的匿名类型,您可以:
string.Concat
(请注意,如果int.Parse
中的任何字符串实际上不是数字, years
将引发异常