まず、整数配列を比較する方法が必要です。フレームワークのクラスで使用するには、EquailtyComparerを作成します。配列は常にソートされている場合、それは実装が比較的容易である:
public class IntArrayComparer : IEqualityComparer<int[]> {
public bool Equals(int[] x, int[] y) {
if (x.Length != y.Length) return false;
for (int i = 0; i < x.Length; i++) {
if (x[i] != y[i]) return false;
}
return true;
}
public int GetHashCode(int[] obj) {
int code = 0;
foreach (int value in obj) code ^= value;
return code;
}
}
今、あなたはユニークな配列を得るためにHashSetの中でキーとして整数配列を使用することができます。
int[][] selection = {
new int[] { 1 }, // column A
new int[] { 6 }, // column F
new int[] { 6 }, // column F
new int[] { 8, 9 }, // columns H:I
new int[] { 8, 9 }, // columns H:I
new int[] { 12, 15 } // columns L:O
};
HashSet<int[]> arrays = new HashSet<int[]>(new IntArrayComparer());
foreach (int[] array in selection) {
arrays.Add(array);
}
HashSetのはただ投げます重複した値があるので、4つの整数配列が含まれるようになりました。
最も良い方法を定義する:a)最速、b)読みやすいコード、c)最小量のメモリを使用するなど –
重複する行?行が同じかどうかを正確に判断するもの - 正確に同じシーケンスでなければならないのでしょうか? –
訂正していただきありがとうございます。投稿を編集しました – abatishchev