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

Definitie

Zoekt naar een element dat overeenkomt met de voorwaarden die zijn gedefinieerd door het opgegeven predicaat en retourneert het eerste exemplaar binnen het hele Arraypredicaat.

public:
generic <typename T>
 static T Find(cli::array <T> ^ array, Predicate<T> ^ match);
public static T Find<T>(T[] array, Predicate<T> match);
static member Find : 'T[] * Predicate<'T> -> 'T
Public Shared Function Find(Of T) (array As T(), match As Predicate(Of T)) As T

Type parameters

T

Het type van de elementen van de matrix.

Parameters

array
T[]

De eendimensionale matrix op basis van nul om te zoeken.

match
Predicate<T>

Het predicaat dat de voorwaarden definieert van het element waarnaar moet worden gezocht.

Retouren

T

Het eerste element dat overeenkomt met de voorwaarden die zijn gedefinieerd door het opgegeven predicaat, indien gevonden; anders is de standaardwaarde voor het type T.

Uitzonderingen

array is null.

– of –

match is null.

Voorbeelden

In het volgende voorbeeld wordt een Predicate<T> gemachtigde met de Find algemene methode gebruikt om een matrix met Point structuren te doorzoeken. De methode die de gemachtigde vertegenwoordigt, ProductGT10retourneert true als het product van de X- en Y-velden groter is dan 100.000. Met Find de methode wordt de gemachtigde aangeroepen voor elk element van de matrix, waardoor het eerste punt wordt geretourneerd dat voldoet aan de testvoorwaarde.

Note

Visual Basic, C#- en F#-gebruikers hoeven de gemachtigde niet expliciet te maken of het typeargument van de algemene methode op te geven. De compilers bepalen de benodigde typen van de methodeargumenten die u opgeeft.

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
open System
open System.Drawing

// Return true if X times Y is greater than 100000.
let productGT10 (p: Point) = p.X * p.Y > 100000

// Create an array of five Point structures.
let points = 
    [| Point(100, 200)
       Point(150, 250)
       Point(250, 375)
       Point(275, 395)
       Point(295, 450) |]

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

// Display the first structure found.
printfn $"Found: X = {first.X}, Y = {first.Y}"

// The example displays the following output:
//       Found: X = 275, Y = 395
Imports System.Drawing

Public Module Example
   Public Sub Main()
      ' Create an array of five Point structures.
      Dim points() As Point = { 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. 
      Dim first As Point = Array.Find(points, AddressOf ProductGT10)

      ' Display the first structure found.
      Console.WriteLine("Found: X = {0}, Y = {1}", _
            first.X, first.Y)
   End Sub

   ' Return true if X times Y is greater than 100000.
   Private Function ProductGT10(ByVal p As Point) As Boolean
      Return p.X * p.Y > 100000 
   End Function
End Module
' The example displays the following output:
'       Found: X = 275, Y = 395

In plaats van expliciet een methode met de benodigde handtekening te definiëren, een Predicate<T> gemachtigde te instantiëren en de gemachtigde door te geven aan de Find methode, is het gebruikelijk om een lambda-expressie te gebruiken. Het volgende voorbeeld is identiek aan de vorige, behalve dat er een lambda-expressie als argument match wordt gebruikt.

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
open System
open System.Drawing

let points = 
    [| Point(100, 200)
       Point(150, 250)
       Point(250, 375)
       Point(275, 395)
       Point(295, 450) |]
// Find the first Point structure for which X times Y
// is greater than 100000.
let first = Array.Find(points, fun p -> p.X * p.Y > 100000)
// let first = points |> Array.find (fun p -> p.X * p.Y > 100000) 

// Display the first structure found.
printfn $"Found: X = {first.X}, Y = {first.Y}"

// The example displays the following output:
//       Found: X = 275, Y = 395
Imports System.Drawing

Public Module Example
   Public Sub Main()
      ' Create an array of five Point structures.
      Dim points() As Point = { 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. 
      Dim first As Point = Array.Find(points, 
                                      Function(p) p.X * p.Y > 100000)

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

Opmerkingen

Dit Predicate<T> is een gemachtigde voor een methode of een lambda-expressie die retourneert true als het object dat eraan wordt doorgegeven, overeenkomt met de voorwaarden die zijn gedefinieerd in de gedelegeerde- of lambda-expressie. De elementen van array worden afzonderlijk doorgegeven aan de Predicate<T>, beginnend met het eerste element en eindigend met het laatste element. De verwerking wordt gestopt wanneer er een overeenkomst wordt gevonden.

Deze methode is een O(n)-bewerking, waarbij n de Length van array.

In F# kan de functie Array.find worden gebruikt.

Van toepassing op

Zie ook