5

int[] に特定の値 (この場合は 0 と 1) のみが含まれていることを確認し、含まれていない場合は例外をスローする必要があります。

次のいずれかのソリューションよりも効率的な方法はありますか?

シンプル(しかしO(n)):

for(int n = 0; n < myArray.Length; n++)
    if(!(myArray[n] == 0 || myArray[n] == 1))
        throw new Exception("Array contains invalid values");

Where() の使用:

if(myArray.Where(n => !(n==1 || n==0)).ToArray().Length > 0)
    throw new Exception("Array contains invalid values");
4

3 に答える 3

0

あなたが使用しようとすることができますArray.TrueForAll

if (!Array.TrueForAll(myArray, n => n == 0 || n == 1))
     throw new Exception("Array contains invalid values");
于 2015-11-18T19:05:10.903 に答える
0

ここにあなたの質問に応じた研究ブログの投稿があります http://www.tkachenko.com/blog/archives/000682.html

テスト済み

int[] data = new int[100000000];

本当にパフォーマンスに興味があるなら、確実に Any() を使うべきではありません )))))

したがって、配列内のカップルの値を検索する必要がある限り、答えはありません-forループ検索またはforeach(int []の場合、forループとしてCILにコンパイルされます)が最適なオプションです

foreach loop search:            39 ms
for loop search:                39 ms
Contains() method search:       56 ms
Any() method search:            446 ms
IndexOf() method search:        57 ms
于 2015-11-18T19:08:01.083 に答える