Kon*_*ten 5 c# linq arrays group-by
我正在使用GroupBy(...),我意识到,虽然工作,但我不喜欢使用var。请叫我肛门,但我想知道当我拥有它时我的类型是什么。(当然,我不是一个理论家,当语法让人眼睛流血时,我确实使用var。不过,如果有人敦促出现的话,很高兴知道如何明确它。)
var grouping = array.GroupBy(element => element.DayOfWeek);
foreach (var group in grouping)
{
Console.WriteLine("Group " + group.Key);
foreach (var value in group)
Console.WriteLine(value.Start);
}
Run Code Online (Sandbox Code Playgroud)
根据智能感知,我正在生成IGrouping类型的内容,但是当我尝试显式输入该内容时,发生了奇怪的事情。我已经到达以下位置。
IEnumerable<IGrouping<DayOfWeek, TimeInfo>> grouping
= array.GroupBy(element => element.DayOfWeek);
foreach (IGrouping<DayOfWeek, TimeInfo> group in grouping)
{
Console.WriteLine("Group " + group.Key);
foreach (TimeInfo value in group)
Console.WriteLine(value.Start);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是两个问题。下面的结果是正确且最窄的范围吗?如果没有,我怎样才能额外收紧呢?
但是,如果是这样,我想知道是否有更好的方法来完成这项任务。我只需要根据星期几(或实际生产中的任何其他条件)将数组中的元素放入不同的容器中。我真的不需要密钥,只是一种将我的一维数组变成二维数组的方法。可以这么说,这与SelectMany相反。(不需要广泛的答案 - 只需一个可以谷歌搜索的关键字。)
下面的结果是正确且最窄的范围吗?
好吧,IGrouping<TKey,TElement>实施IEnumerable<TElement>这样你就可以这样做:
IEnumerable<IEnumerable<TimeInfo>> grouping =
= array.GroupBy(element => element.DayOfWeek);
Run Code Online (Sandbox Code Playgroud)
注意数据(包括键值)仍然在具体的数据结构中;您只是将 is 作为集合的集合进行交互。
从那里您可以使用以下方法转换为数组ToArray():
TimeInfo[][] groups =
grouping.Select(g => g.ToArray()).ToArray();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
514 次 |
| 最近记录: |