2 Stimmen

C#, prüfen, ob Integer-Array hat negative Zahlen in ihm

Ich habe ein Array int[] numArray . Ich möchte wissen, ob es einen einfachen Weg gibt, um zu prüfen, ob ein Array negative Zahlen enthält?

Wenn es keine direkte Methode gibt, reicht auch linq. Ich bin ein bisschen neu in Linq. Kann jemand einen Vorschlag machen?

7voto

Justin Niessner Punkte 235353

Wenn Sie offen sind für die Verwendung von LINQ:

var containsNegatives = numArray.Any(n => n < 0);

Oder, wenn Sie es auf die "altmodische" Weise machen wollen, müssen Sie einfach eine Schleife machen:

var containsNegatives = false;

foreach(var n in numArray)
{
    if(n < 0)
    {
        containsNegatives = true;
        break;
    }
}

Und wenn Sie wirklich etwas Besonderes wollen, können Sie daraus eine Erweiterungsmethode machen:

public static class EnumerableExtensions
{
    public static bool ContainsNegatives(this IEnumerable<int> numbers)
    {
        foreach(n in numbers)
        {
            if(n < 0) return true;
        }

        return false;
    }
}

Und rufen Sie es in Ihrem Code auf wie:

var containsNegatives = numArray.ContainsNegatives();

5voto

Joe Punkte 78340

Sie könnten verwenden Jede :

bool containsNegative = numArray.Any(i => i < 0)

Oder

bool containsNegative = numArray.Min() < 0;

EDIT

int[] negativeNumbers = numArray.Where(i => i < 0).ToArray();

2voto

John Hartsock Punkte 82122
var negativeExist = numArray.Any(a => a < 0);

0voto

Sie können verwenden Array.Find(T) Methode, um diese Aufgabe zu erfüllen.

public static T Find<T>(
    T[] array,
    Predicate<T> match
)

Zum Beispiel,

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
 */

0voto

Andreas Punkte 6325

Traditionell:

foreach (int number in numArray) { if (number < 0) return true; }
return false;

Mit LINQ:

bool result = numArray.Any(x => x < 0);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X