バイトの小さなリストがあり、それらがすべて異なる値であることをテストしたいと思います。たとえば、私はこれを持っています:
List<byte> theList = new List<byte> { 1,4,3,6,1 };
すべての値が異なるかどうかを確認する最良の方法は何ですか?
バイトの小さなリストがあり、それらがすべて異なる値であることをテストしたいと思います。たとえば、私はこれを持っています:
List<byte> theList = new List<byte> { 1,4,3,6,1 };
すべての値が異なるかどうかを確認する最良の方法は何ですか?
bool isUnique = theList.Distinct().Count() == theList.Count();
Distinct
を使用するのと同様のロジックGroupBy
:
var isUnique = theList.GroupBy(i => i).Count() == theList.Count;
次のこともできます:
var uniqueIds = new HashSet<long>(originalList.Select(item => item.Id));
if (uniqueIds.Count != originalList.Count)
{
}
多くの解決策があります。
そして、「juergen d」や「Tim Schmelter」が言及したように、LINQ を使用したより美しいものは間違いありません。
しかし、「複雑さ」と「速さ」をむき出しにするなら、自分で実装するのが最善の解決策です。解決策の 1 つは、N サイズの配列を作成することです (バイトの場合は 256)。そして、配列をループし、値が1の場合、すべての反復で一致する数値インデックスをテストします。つまり、配列インデックスを既にインクリメントしているため、配列は明確ではありません。それ以外の場合、配列セルをインクリメントしてチェックを続けます.