2

double 型のデータビューに列があります。列のすべての値が互いに異なるかどうかを確認する必要があります。

linq を介してそれを行う方法はありますか?

4

4 に答える 4

2

浮動小数点型を比較したい場合は、浮動小数点数はそれほど簡単に比較できないため、等値の尺度を指定するためにメソッドIEqualityComparer<T>を上書きする場所を独自に定義することをお勧めします。Equals()

比較された値がいくつかの計算から得られたものである場合、それらを適切に比較するもう 1 つの理由にすぎません。または、2.000000001 程度であるという理由だけで、表示されている数値 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();
    }
}

浮動小数点を比較する方法については、こちらまたはこちらを参照してください。

于 2013-10-03T11:04:00.003 に答える
1
listOfItems.Distinct().Count() == listOfItems.Count

listOfItems がList<double>

于 2013-10-03T11:52:05.770 に答える
0

重複を見つけることができます:

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

重複に値が含まれている場合、列のすべての値は互いに異なりません。

于 2013-10-03T10:49:42.500 に答える
0
var distinctValues = view.ToTable(true, "YourColumn");
if(distinctValues.Rows.Count == view.Count)
  //Column values are same
于 2013-10-03T10:52:41.810 に答える