Подтвердить что ты не робот

Bool list проверяет, является ли каждый элемент в списке ложным

У меня есть List<bool> с большим количеством значений. Каков наиболее эффективный способ проверить, равен ли каждый отдельный элемент в списке false?

4b9b3361

Ответ 1

Вы можете использовать Enumerable.Any, который будет удовлетворять условию первого совпадения. Как Хабиб правильно сказал лучше использовать Any как Enumerable. Все вернет true для пустого списка bool.

!lst.Any(c=> c == true);

ИЛИ использовать Enumerable.All

lst.All(c=> c == false);

Ответ 2

Я согласен с использованием IEnumerable.Any/Все. Тем не менее, я не согласен с большинством голосов (что было неправильно на момент написания этого) и несколькими связанными комментариями Any vs All.

Следующие операции эквивалентны семантически. Обратите внимание, что отрицания применяются как внутри, так и по предикату и по результату операции.

!l.Any(x => f(x))
l.All(x => !f(x))

Теперь в этом случае мы ищем:

Если это не так, то есть истинное значение.

!l.Any(x => x)  // f(x) = x == true

Или

В этом случае каждое значение не соответствует действительности.

l.All(x => !x)  // f'(x) = !f(x) = !(x == true)

Нет ничего особенного для пустых списков, результат один и тот же: например. !empty.Any(..) является ложным, как и empty.All(..), и приведенное выше отношение эквивалентности остается в силе.

Кроме того, обе формы оцениваются лениво и требуют одинакового количества оценок в LINQ To Objects; внутренне разница для реализации последовательности просто отрицает проверку предиката и значение результата.

Ответ 3

Вы можете использовать метод LINQ's All:

list.All(x => x == false);

Это вернет false немедленно, если оно найдет значение, равное true.