假设我有一个具有float
属性的元素的集合。
我是通过它分组的,但我发现我的分组不希望。
例如(使用double
获利Random
的NextDouble()
(:
void Main()
{
var examples = new List<Example>();
var rnd = new Random();
for (int i = 0; i < 100; i++)
{
var newPosition = rnd.NextDouble();
examples.Add(new Example { Position = newPosition });
}
examples.GroupBy(x => x.Position).Dump();
}
class Example
{
public double Position { get; set; }
}
这将导致这样的事情:
分组0,00075609376689237252
分组0,0010980092925475954
分组0,0020200186418462629
分组0,0062832017458431429
...
问题是(是否值得(:我如何通过允许"边界"来分组它们。喜欢... -0.05?
-0.05的边界有点不清楚:
对于类似:{0.01、0.02、0.03、0.04、0.05、0.06、0.07、0.07、0.08、0.09、0.1}
每个值的下一个值为0.01,但所有值在[ -0.05]中的范围为0.05。
但是0.01和0.06彼此之间太远。
但四舍五入到第二个小数可能已经足够了。
examples.GroupBy(x => Math.Round( x.Position,2))
如Bleep-bloop所说:
如果要按0,05组进行分组,则可以进行
x => Math.Round(x.Position / 0.05)
mcve:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public void Main()
{
var examples = new List<Example>();
var rnd = new Random();
for (int i = 0; i < 100; i++)
{
var newPosition = rnd.NextDouble();
examples.Add(new Example { Position = newPosition });
}
examples.GroupBy(x => Math.Round( x.Position,2)).Dump();
examples.GroupBy(x => x => Math.Round(x.Position / 0.05)).Dump();
}
public class Example
{
public double Position { get; set; }
}
}
现场景象:https://dotnetfiddle.net/ldnbgu