你可以尝试这样的事情:
var someNumbers = new [] { 10,67,45,26,78,53,12,45,68};
var groupNames = new [] { "A", "B", "C", "D" };
// Key Value
var result = someNumbers.GroupBy(v => groupNames[v / 25], p => p);
foreach(var v in result.OrderBy(i => i.Key))
{
Console.WriteLine(v.Key);
foreach(var k in v)
Console.WriteLine(" " + k);
}
我将值分组为value / 25
这将是一个整数除法,并将值按 25 的部分分组。例如: value13
. 13 / 25 = 0
so 13
将按0分组。例如:value67
. 67 / 25 = 2
,因此将按 2 分组。
唯一的问题是,如果该值超过 99,您会得到一个IndexOfOutBoundsException
.
这可能更安全:
public static void Main()
{
var someNumbers = new [] { 10,67,45,26,78,53,12,45,68};
var groupNames = new [] { "A", "B", "C", "D" };
var result = someNumbers.GroupBy(v => v / 25, p => p);
foreach(var v in result.OrderBy(i => i.Key))
{
// check if the key can be used as index for the name array.
if(v.Key >= groupNames.Length)
Console.WriteLine(v.Key + " no name for that");
else
Console.WriteLine(groupNames[ v.Key]);
foreach(var k in v)
Console.WriteLine(" " + k);
}
}
在这里查看现场演示:https://dotnetfiddle.net/8XElaZ https://dotnetfiddle.net/8XElaZ