C# 如何将LINQ中的2个不同序列分组?
如何通过下一个键将两个不同的第一类年份==IEnumerable和第二类occurs=IEnumerable序列分组为1个序列:如果occurs中的数字相同,则按年份排序,否则仅使用LINQ进行排序 我通过以下方式获得了这些序列:C# 如何将LINQ中的2个不同序列分组?,c#,linq,C#,Linq,如何通过下一个键将两个不同的第一类年份==IEnumerable和第二类occurs=IEnumerable序列分组为1个序列:如果occurs中的数字相同,则按年份排序,否则仅使用LINQ进行排序 我通过以下方式获得了这些序列: var years = some_strings.Select(x => x.Split(' ')[1]); var occurs = years.Select(x => years.Count(e => e == x)); 所以变量years只
var years = some_strings.Select(x => x.Split(' ')[1]);
var occurs = years.Select(x => years.Count(e => e == x));
所以变量years只包含带有years的字符串,而occurrent包含第一个序列中相同年份的计数
我无法理解LINQ中的这些技术
我会这样做吗
occurs.GroupBy(x => x ???
我应该在哪里使用第二个序列?
也许我可以在一个查询中得到这些序列,然后处理它
UPD
我使用匿名类修改了1中的2个查询:
some_strings.Select(x => x.Split(' ')[1]).
GroupBy(x => x).
Select(x => new {num = x.Key, count = x.Count() })
因此,有几年的时间,并且两者都发生
我正在尝试获取下一个字符串:
1 1990
1 1991
1 1992
2 1967
2 1968
5 2010
...
现在,有了带有所需值的查询,我如何才能像前面的子句那样对其排序?您已经非常接近了。这将为您提供与最新更新类似的字符串列表:
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将抛出异常。这将为您提供与最新更新类似的字符串列表:
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将引发异常不确定您想要实现什么,因为没有代码,但所提到的语句可以组合为“var foo=some_strings.Split”[1]。根据需要执行强制转换的返回类型选择x=>x,您也可以使用.Cast来强制转换最终输出。因此,您的编辑中的查询可以满足您的要求吗?在这种情况下,您应该将其作为答案发布,而不是作为问题的编辑。如果没有,您需要解释您的问题。@Servy我更新了我的问题,希望现在能更清楚一点。我不太确定您想要实现什么,因为没有代码,但是提到的语句可以像“var foo=some_strings.Split”[1]那样组合在一起.Selectx=>x……’根据您需要执行强制转换的返回类型,您还可以使用.Cast来强制转换最终输出。因此,编辑中的查询符合您的要求吗?在这种情况下,您应该将其作为答案发布,而不是作为问题的编辑。如果没有,你需要解释你有什么问题。@Servy我更新了我的问题,我希望现在能更清楚一点,太好了!工作完美。这正是我需要的:太好了!工作完美。这正是我需要的: