2013-05-09 9 views
5

Mam tablicę, powiedzmyJak sprawdzić, czy wszystkie elementy w tablicy są liczbami całkowitymi dodatnimi?

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

Jak mogę sprawdzić (w większości łatwy i skuteczny sposób), że wszystkie elementy są pozytywne? Jeśli co najmniej jedna liczba nie jest dodatnią liczbą całkowitą, system zareaguje negatywnie.

Pożądany wyjściowa:

jeśli wszystkie numery są pozytywne, to zostanie wyświetlony komunikat "Wszystkie Pozytywne" else "Wrong"

Mój strzał

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

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

+0

Powinieneś sprawdzić za pomocą '.Any' z nich jest mniejszy od zera – V4Vendetta

Odpowiedz

12

Już prawie byłeś na miejscu - ale porównywałeś się z postaciami zamiast liczb całkowitych.

Jeśli chcesz sprawdzić, czy wszystko jest ściśle dodatnia, zastosowanie:

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

Jeśli rzeczywiście chcesz sprawdzić wszystkie są nieujemne (czyli 0 jest dopuszczalne) używać:

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

Powinieneś zdecydowanie rozważyć, co chcesz zrobić z 0, ponieważ twoje stwierdzenie problemu jest w rzeczywistości sprzeczne. ("Wszystkie pozytywy" i "brak negatywu" to nie to samo.)

Pamiętaj, że podobnie jak Any, All zakończy działanie, gdy tylko zna wynik - więc jeśli pierwsza wartość jest ujemna, wygrywa " t trzeba przejrzeć resztę.

+0

Cholera! Moje rozwiązanie było szybsze ': D' –

5

Zastosowanie Enumerable.Any jak :

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

Albo można użyć Enumerable.All odczuwalna:

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

Biorąc pod uwagę, że PO wyraża to jako" wszystkie wartości są pozytywne "Myślę, że jest jaśniejsze użycie" Wszystkie "i pozytywny test niż" Any "z negatywnym test i wyniki zostały odwrócone. –

+0

@ JonSkeet, dziękuję, zmodyfikowałem moją odpowiedź – Habib

+0

OP wspomina 'co najmniej jedną liczbę ujemną', więc' Any' będzie nadal ważne. –

3

Prawie tam. Ale w twoim stanie porównujesz znaki zamiast liczb całkowitych, które są złe w twojej sytuacji.

Użyj Enumerable.All jak;

Określa, czy wszystkie elementy sekwencji spełniają warunek.

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

Oto DEMO.

Pamiętaj, że 0 nie jest dodatnia.

1

Poniżej znajduje się C# rozwiązanie problemu (powinno być dość skuteczny performance-wise):

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 wskazuje wynik (można użyć ciąg var jeśli wolisz). Zasadniczo ta sama składnia może dotyczyć języków Java-podobnych, w tym skryptów.

1
string result = array.Any(x => x < 0)?"Wrong":"Positive"; 
Powiązane problemy