我怎么能用边界来 LINQ 的 GroupBy()?



假设我有一个具有float属性的元素的集合。

我是通过它分组的,但我发现我的分组不希望。

例如(使用double获利RandomNextDouble()(:

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

相关内容

  • 没有找到相关文章

最新更新