使用 LINQ 的一组浮点数的差异
本文关键字:一组 浮点数 LINQ 使用 | 更新日期: 2023-09-27 18:33:39
我在数据视图中有一列是双精度类型的。我必须检查列中的所有值是否彼此不同。
有没有办法通过linq做到这一点?
如果你想比较浮点类型,我真的建议定义你自己的IEqualityComparer<T>
,你覆盖Equals()
方法,以指定相等的度量,因为浮点数不那么容易比较。
如果您的比较值来自某些计算,那么这只是正确比较它们的又一个原因,或者您可能会看到的数字 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();
}
}
有关如何比较浮点的灵感,请导航到此处或此处。
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