[英]C#, check whether integer array has negative numbers in it
I have a array int[] numArray
. 我有一个数组
int[] numArray
。 I want to know is there any straight forward way to just check whether array has negative numbers in it ? 我想知道有没有直接的方法来检查数组中是否有负数?
If there is no direct method even linq will do . 如果没有直接方法,即使linq也会这样做。 I am bit new to linq .
我对linq有点新意。 Can anyone suggest ?
谁有人建议?
If you're open to using LINQ: 如果您愿意使用LINQ:
var containsNegatives = numArray.Any(n => n < 0);
Or, if you want to do it the "old fashioned" way...you just have to loop: 或者,如果你想以“老式”的方式做到这一点......你只需要循环:
var containsNegatives = false;
foreach(var n in numArray)
{
if(n < 0)
{
containsNegatives = true;
break;
}
}
And if you really want to get fancy, you could turn that into an Extension method: 如果你真的想要花哨,你可以把它变成一个扩展方法:
public static class EnumerableExtensions
{
public static bool ContainsNegatives(this IEnumerable<int> numbers)
{
foreach(n in numbers)
{
if(n < 0) return true;
}
return false;
}
}
And call it from your code like: 并从您的代码中调用它,如:
var containsNegatives = numArray.ContainsNegatives();
var negativeExist = numArray.Any(a => a < 0);
You can use Array.Find(T) method to perform this task. 您可以使用Array.Find(T)方法执行此任务。
public static T Find<T>(
T[] array,
Predicate<T> match
)
For example, 例如,
using System;
using System.Drawing;
public class Example
{
public static void Main()
{
// Create an array of five Point structures.
Point[] points = { new Point(100, 200),
new Point(150, 250), new Point(250, 375),
new Point(275, 395), new Point(295, 450) };
// To find the first Point structure for which X times Y
// is greater than 100000, pass the array and a delegate
// that represents the ProductGT10 method to the static
// Find method of the Array class.
Point first = Array.Find(points, ProductGT10);
// Note that you do not need to create the delegate
// explicitly, or to specify the type parameter of the
// generic method, because the C# compiler has enough
// context to determine that information for you.
// Display the first structure found.
Console.WriteLine("Found: X = {0}, Y = {1}", first.X, first.Y);
}
// This method implements the test condition for the Find
// method.
private static bool ProductGT10(Point p)
{
if (p.X * p.Y > 100000)
{
return true;
}
else
{
return false;
}
}
}
/* This code example produces the following output:
Found: X = 275, Y = 395
*/
Traditional: 传统:
foreach (int number in numArray) { if (number < 0) return true; }
return false;
With LINQ: 使用LINQ:
bool result = numArray.Any(x => x < 0);
A bit twidling version would be 有点笨拙的版本
public static bool AnyNegative(int[] arr){
const long firstBit = 2147483648;
var res = false;
for (var i = 0; i < arr.Length && !res; i++) res = (arr[i] & firstBit) == firstBit;
return res;
}
you can the call it like this> 你可以像这样称呼它
int arr = {...}
if(arr.AnyNegative()){
//do stuf if there's any negative numbers
}
of course this is just an obfuscated version of 当然这只是一个模糊的版本
public static bool AnyNegative(int[] arr){
var res = false;
for (var i = 0; i < arr.Length && !res; i++) res = arr[i] < 0;
return res;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.