如果bool数组中的所有元素都为真?

时间:2015-12-11 00:18:31

标签: c# arrays

我在使用array.All<>功能时遇到了困难。

private bool noBricksLeft() {
    bool[] dead = new bool[brick.Length];

    for (int i = 0; i < brick.GetLength(0); i++) {
        if (brickLocation[i, 2] == 0)
            dead[i] = true;
        else
            continue; // move onto the next brick
    }

    if (dead.All(dead[] == true)) // IF ALL OF THE ELEMENTS ARE TRUE
        return true;
    else
        return false;
}

我想知道如何实现if (dead.All(dead[] == true))

3 个答案:

答案 0 :(得分:18)

您只需使用 lambda-expression

if (dead.All(x => x))

根据using System.Linq的{​​{3}}方法。

会做到这一点。此外,返回答案的if语句是无用的,因此您可以将其重写为:

private bool noBricksLeft() {
    bool[] dead = new bool[brick.Length];

    for (int i = 0; i < brick.GetLength(0); i++) {
        if (brickLocation[i, 2] == 0)
            dead[i] = true;
        else
            continue; //move onto the next brick
    }

    return dead.All(x => x);
}

部分借鉴IEnumerable<T>.All的另一个想法如下:

private bool noBricksLeft() {
    return Enumerable.Range(0,brick.Length).All(i => brickLocation[i,2] == 0);
}

答案 1 :(得分:6)

是的,您可以使用.All,但您的代码仍然不是很好。据我所知,您可以像这样重写代码,而无需使用数组:

private bool noBricksLeft () {
    for (int i = 0; i < brick.GetLength(0); i++) {
        // inverted your condition; we can short-circuit
        // and just return false
        if (brickLocation[i, 2] != 0)
            return false;
    }
    // every brick passed our condition, so return true
    return true;
}

答案 2 :(得分:2)

您可以使用return dead.All(x => x);