26

ブール値で満たされた配列があり、真の要素の数を知りたいとします。

private bool[] testArray = new bool[10] { true, false, true, true, false, true, true, true, false, false };

int CalculateValues(bool val)
{
    return ???
}

CalculateValuesは、valがtrueの場合は6を返し、valがfalseの場合は4を返す必要があります。

明らかな解決策:

int CalculateValues(bool val)
{
    int count = 0;
    for(int i = 0; i<testArray.Length;i++)
    {
        if(testArray[i] == val)
            count++;
    }
    return count;
}

「エレガントな」解決策はありますか?

4

6 に答える 6

50
return testArray.Count(c => c)
于 2012-07-30T23:04:45.277 に答える
38

LINQを使用します。あなたはtestArray.Where(c => c).Count();真のカウントのために行うかtestArray.Where(c => !c).Count();、偽のチェックのために使用することができます

于 2012-07-30T23:02:14.717 に答える
15

次を使用できます。

int CalculateValues(bool val)
{
    return testArray.Count(c => c == val);
}

これは、パラメータに基づいてtrueとチェックを処理します。 falseval

于 2012-07-30T23:06:08.790 に答える
2

このようなものを試してください:

bool[] testArray = new bool[10] { true, false, true, true, false, true, true, true, false, false };
bool inVal = true;
int i;

i = testArray.Count(ai => ai == inVal);
于 2012-07-30T23:08:17.883 に答える
2

機能的にtestArray.Count(c => c)は正しいですが、直感的ではなく、後の開発者がc => c何もしないと思ってその部分を取り除くリスクがあります。

これは、ラムダ関数を意味のある名前で個別に宣言することでリスクを軽減できます。

Func<bool, bool> ifTrue = x => x;
return testArray.Count(ifTrue);
于 2015-10-21T11:02:59.037 に答える
-2

私はこれが好き:

int trueCount = boolArray.Sum( x  => x ? 1 : 0 ) ;
于 2012-07-31T00:11:44.033 に答える