[英]Range division in c#
将范围值分组,例如,如果范围在 0 到 100 之间,并且我有四个组 A、B、C、D。 如果我想将范围分为四组,例如 0-25 组 D 26-50 组 C 51-75 组 B 76-100 组 A
如何使用 C# 进行此类分组,并将范围保存在列表中。 那么如何确定某个数字是否属于哪个组呢? 例如 55 属于 B 组。
请帮忙!
你可以尝试这样的事情:
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
上的value / 25
分组,这将是一个整数除法,并将值分组为 25 的部分。例如: value 13
。 13 / 25 = 0
所以13
将按13 / 25 = 0
分组。例如:值67
。 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
下面是一些更多的示例代码来帮助你:
var groups = new[] { "A", "B", "C", "D" };
//Range size and group size is configurable, should work with any range.
var range = Enumerable.Range(0, 1000).ToArray();
var groupSize = range.Length / groups.Length;
// Here we split range in groups. If range size is not exactly divisible
// to groups size, all left elements go to the last group, then we form
// a dictionary with labels as keys and array of numbers as values
var split = range
.GroupBy(c => Math.Min(c / groupSize, groups.Length - 1))
.ToDictionary(c => groups[c.Key], c => c.ToArray());
Console.WriteLine(String.Join(" ", ranges["A"]));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.