繁体   English   中英

使用LINQ的一组浮点数的差

[英]Difference of a set of floating-point numbers using LINQ

我在具有双重类型的数据视图中有一列。 我必须检查列中的所有值是否互不相同。

有没有办法通过linq做到这一点?

如果要比较浮点类型,我真的建议您定义自己的IEqualityComparer<T> ,在其中您重写Equals()方法以指定相等性的度量,因为浮点数不那么容易比较。

如果您的比较值来自某些计算,则只是正确比较它们的又一个原因,否则可能会因为2000000001左右而与您看到的数字2不匹配另一个数字2。

因此,使用以下LINQ查询

double[] items = new[] { 1d, 2d, 3d };
var dups = items.GroupBy(i => i, new MyDoubleComparer())
                .Where(g => g.Count() > 1)
                .Select(g => g.Key);

与您自己的比较器。 您可以指定精确度。

class MyDoubleComparer : IEqualityComparer<double>
{
    public bool Equals(double x, double y)
    {
        // your comparing logic here
    }

    public int GetHashCode(double obj)
    {
        throw new NotImplementedException();
    }
}

有关如何比较浮点的启发,请在此处此处导航。

listOfItems.Distinct().Count() == listOfItems.Count

假设listOfItems是一个List<double>

您可以尝试查找重复项:

int[] listOfItems = new[] { 4, 2, 3, 1, 6, 4, 3 };
var duplicates = listOfItems
    .GroupBy(i => i)
    .Where(g => g.Count() > 1)
    .Select(g => g.Key);

如果重复项包含值,则列中的所有值均互不相同。

var distinctValues = view.ToTable(true, "YourColumn");
if(distinctValues.Rows.Count == view.Count)
  //Column values are same

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM