GroupBy
本质上构建了一个查找表(字典),其中源中满足常见条件的每个项目都被分组到一个列表中,然后分配给查找表中的一个键。
这是一个示例程序,它将您的调用替换为xx.Dump()
一个代码块,该代码块以特定于您的示例的方式漂亮地打印输出。请注意对OrderBy
键(范围值)以及与每个范围关联的项目组进行第一次排序的使用。
using System;
using System.Collections.Generic;
using System.Linq;
class GroupByDemo
{
static public void Main(string[] args)
{
List<int> ranges = new List<int>() {100, 1000, 1000000};
List<int> sizes = new List<int>(
new int[]{99,98,10,5,5454, 12432, 11, 12432, 992, 56, 222});
var sizesByRange =
sizes.GroupBy(size => ranges.First(range => range >= size));
// Pretty-print the 'GroupBy' results.
foreach (var range in sizesByRange.OrderBy(r => r.Key))
{
Console.WriteLine("Sizes up to range limit '{0}':", range.Key);
foreach (var size in range.ToList().OrderBy(s => s))
{
Console.WriteLine(" {0}", size);
}
}
Console.WriteLine("--");
}
}
预期成绩
请注意,12432
在最后一组中出现了两次,因为该值在原始源列表中出现了两次。
Sizes up to range limit '100':
5
10
11
56
98
99
Sizes up to range limit '1000':
222
992
Sizes up to range limit '1000000':
5454
12432
12432
--