Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ对一组浮点数进行差分_C#_Linq_Floating Point_Dataview - Fatal编程技术网

C# 使用LINQ对一组浮点数进行差分

C# 使用LINQ对一组浮点数进行差分,c#,linq,floating-point,dataview,C#,Linq,Floating Point,Dataview,我在dataview中有一个双类型的列。 我必须检查列中的所有值是否彼此不同 var distinctValues = view.ToTable(true, "YourColumn"); if(distinctValues.Rows.Count == view.Count) //Column values are same 有没有办法通过linq实现这一点?您可以尝试查找重复项: int[] listOfItems = new[] { 4, 2, 3, 1, 6, 4, 3 }; var

我在dataview中有一个双类型的列。 我必须检查列中的所有值是否彼此不同

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

有没有办法通过linq实现这一点?

您可以尝试查找重复项:

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);

如果重复项包含值,则列中的所有值彼此没有差异。

如果要比较浮点类型,我建议您定义自己的
IEqualityComparer
,其中覆盖
Equals()
方法,以指定相等的度量,因为浮点数不容易比较

var distinctValues = view.ToTable(true, "YourColumn");
if(distinctValues.Rows.Count == view.Count)
  //Column values are same
如果您的比较值来自某些计算,那么这只是正确比较它们的另一个原因,或者您看到的数字2可能与另一个数字2不匹配,因为它是2.000000001左右

因此,使用以下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();
    }
}
类MyDoubleComparer:IEqualityComparer
{
公共布尔等于(双x,双y)
{
//你的比较逻辑在这里
}
public int GetHashCode(双obj)
{
抛出新的NotImplementedException();
}
}
有关如何比较浮点的灵感,请浏览或


假设ListoItems是一个
列表

,非常感谢。我会试试这个。嗯,我的答案获得+10/-2的声誉,没有投票和评论。真奇怪。