LINQ的GroupBy()如何设置边界?

时间:2019-05-13 09:10:49

标签: c# linq linq-group

比方说,我有一个具有string[]属性的元素集合。

我正在按它分组,但是我发现不需要分组。

例如(通过float获利double的{​​{1}}):

Random

这将导致如下情况:

  

分组0,00075609376689237252

     

分组0,0010980092925475954

     

分组0,0020200186418462629

     

分组0,0062832017458431429

     

...

问题是(是否有价值):我如何通过允许像... +-0.05这样的“边界”对它们进行分组?

1 个答案:

答案 0 :(得分:2)

+-0.05的界限不清楚:

对于像{这样的集合:{0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.1}
下一个每个值都是0.01,但都在0.05的[+ -0.05]范围内。
但是0.01和0.06彼此相距太远。

但是rounding到小数点后第二位就足够了。

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