Leggere in inglese

Condividi tramite


Array.Find<T>(T[], Predicate<T>) Metodo

Definizione

Cerca un elemento che corrisponde alle condizioni definite dal predicato specificato e restituisce la prima occorrenza all'interno dell'intero Array.

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

Parametri di tipo

T

Tipo degli elementi della matrice.

Parametri

array
T[]

Matrice unidimensionale in base zero da cercare.

match
Predicate<T>

Predicato che definisce le condizioni dell'elemento da cercare.

Restituisce

T

Primo elemento che corrisponde alle condizioni definite dal predicato specificato, se trovato; in caso contrario, il valore predefinito per il tipo T.

Eccezioni

array è null.

-o-

match è null.

Esempio

Nell'esempio seguente viene usato un delegato Predicate<T> con il metodo generico Find per cercare una matrice di strutture Point. Il metodo rappresentato dal delegato, ProductGT10, restituisce true se il prodotto dei campi X e Y è maggiore di 100.000. Il metodo Find chiama il delegato per ogni elemento della matrice, restituendo il primo punto che soddisfa la condizione di test.

Nota

Gli utenti di Visual Basic, C# e F# non devono creare il delegato in modo esplicito o specificare l'argomento di tipo del metodo generico. I compilatori determinano i tipi necessari dagli argomenti del metodo forniti.

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) };

        // Find the first Point structure for which X times Y
        // is greater than 100000.
        Point first = Array.Find(points, ProductGT10);

        // Display the first structure found.
        Console.WriteLine("Found: X = {0}, Y = {1}", first.X, first.Y);
    }

    // Return true if X times Y is greater than 100000.
    private static bool ProductGT10(Point p)
    {
        return p.X * p.Y > 100000;
    }
}
// The example displays the following output:
//       Found: X = 275, Y = 395

Anziché definire in modo esplicito un metodo con la firma necessaria, creare un'istanza di un delegato Predicate<T> e passare il delegato al metodo Find, è consuetudine usare un'espressione lambda. L'esempio seguente è identico a quello precedente, ad eccezione del fatto che usa un'espressione lambda come argomento match.

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) };

        // Find the first Point structure for which X times Y
        // is greater than 100000.
        Point first = Array.Find(points, p => p.X * p.Y > 100000);

        // Display the first structure found.
        Console.WriteLine("Found: X = {0}, Y = {1}", first.X, first.Y);
    }
}
// The example displays the following output:
//       Found: X = 275, Y = 395

Commenti

Il Predicate<T> è un delegato a un metodo o a un'espressione lambda che restituisce true se l'oggetto passato corrisponde alle condizioni definite nel delegato o nell'espressione lambda. Gli elementi di array vengono passati singolarmente alla Predicate<T>, a partire dal primo elemento e terminando con l'ultimo elemento. L'elaborazione viene arrestata quando viene trovata una corrispondenza.

Questo metodo è un'operazione O(n), in cui n è il Length di array.

In F# è possibile usare invece la funzione array.find .

Si applica a

Prodotto Versioni
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Vedi anche