2013-05-09 235 views
5

我有一个数组,说如何检查数组中的所有元素是否都是正整数?

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

我如何检查(以最简便而有效的),所有的元素都是正?如果至少有一个数字不是正整数,系统将以负面方式进行响应。

所需的输出:

如果所有的数字都是肯定的,那么它会显示 “一切积极” 其他 “错误”

我的投篮

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 2013-05-09 05:43:02

+0

那么你应该检查使用'.Any'是否小于零 – V4Vendetta 2013-05-09 05:44:34

回答

12

你几乎在那里 - 但你是比较字符而不是整数。

如果你想检查是否一切严格为正,用途:

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

如果你确实要检查他们都是非负(即0是可以接受的)使用方法:

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

你一定要考虑你想用0来做什么,因为你的问题陈述实际上是矛盾的。 (“所有积极的”和“没有消极的”是不一样的。)

请注意,就像Any,All一知道结果就会退出 - 所以如果第一个值是负值,不需要仔细观察其余部分。

+0

该死!我的解决方案比较快':D' – 2013-05-09 05:58:13

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表示这是“所有的值都是正数”,我认为使用'All'和一个正确的测试比'Any'测试和结果逆转。 – 2013-05-09 05:46:03

+0

@JonSkeet,谢谢,修改我的回答 – Habib 2013-05-09 05:48:27

+0

OP确实提到'至少有一个负数',所以'Any'仍然有效。 – 2013-05-09 05:49:06

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"; 
相关问题