2013-05-09 3 views
5

У меня есть массив, скажетКак проверить, являются ли все элементы массива положительными целыми числами?

int[] array = new int[] { 1, 5, 11, 5 }; 

Как я могу проверить (в наиболее простом и эффективном способе), что все элементы положительны? Если хотя бы одно число не является положительным целым числом, система ответит отрицательно.

Желаемый результат:

, если все числа положительны, то он будет отображаться "Все Положительно" еще "Wrong"

мой выстрел

int[] array = new int[] { 1, 5, 11, 5 }; 
var x = array.All(c => c >= '0' && c <= '9'); 
if (x == true) "Positive" else "Wrong"; 
+2

'array.All (x => x> -1)'? – Patashu

+0

Ну, вы должны проверить использование '.Any' из них меньше нуля – V4Vendetta

ответ

12

Вы были почти там раньше - но вы сравнивали с символами вместо целых чисел.

Если вы хотите, чтобы проверить, все ли строго положителен, использование:

bool allPositive = array.All(x => x > 0); 

Если вы действительно хотите, чтобы проверить, все они неотрицательным (т.е. 0 является приемлемым) использование:

bool allNonNegative = array.All(x => x >= 0); 

Вам обязательно нужно подумать о том, что вы хотите делать с 0, поскольку ваше заявление о проблеме на самом деле противоречиво. («Все положительные» и «отрицательные» - это не одно и то же.)

Обратите внимание, что точно так же, как Any, All уйдет, как только он узнает результат - так что если первое значение отрицательное, Мне нужно посмотреть все остальное.

+0

Черт! Мое решение было быстрее ': D' –

5

Использование Enumerable.Any как :

if(array.Any(r => r < 0)) 
{ 
    //Negative number found 
} 
else 
{ 
    //All numbers are positive 
} 

Или вы можете использовать Enumerable.All как:

if(array.All(r => r > 0)) 
{ 
    //All numbers are positive 
} 
else 
{ 
    //Negative number found 
} 
+1

Учитывая, что OP выражает это как« все значения положительные », я думаю, что более понятно использовать« Все »и положительный тест, чем« Любой »с отрицательным тест и результаты были отменены. –

+0

@JonSkeet, спасибо, изменил мой ответ – Habib

+0

OP действительно упоминает «хотя бы одно отрицательное число», поэтому 'Any' все равно будет действительным. –

3

Вы почти там. Но в вашем состоянии вы сравниваете символы вместо целых чисел, что неверно в вашей ситуации.

Enumerable.All like;

Определяет, удовлетворяют ли все элементы последовательности условию.

int[] array = new int[] { 1, 5, 11, 5 }; 
bool allPositive = array.All(x => x > 0); 
Console.WriteLine(allPositive); 

Вот DEMO.

Запомнить 0 не положительно.

1

Ниже C решение вашей проблемы # (она должна быть достаточно эффективной точки зрения производительности):

int[] array = new int[] { 1, 5, 11,5 }; 

bool _allPositive=true; 

for (int i=0;i<array.length;i++){ 
if(array[i]<0 {_allPositive=false; break;} 
} 

bool _allPositive указывает результат (вы можете использовать строку вар, если вы предпочитаете). По сути, такой же синтаксис может применяться к Java-подобным языкам, включая скрипты.

1
string result = array.Any(x => x < 0)?"Wrong":"Positive"; 
Смежные вопросы