Bagikan melalui


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

Definisi

Mencari elemen yang cocok dengan kondisi yang ditentukan oleh predikat yang ditentukan, dan mengembalikan kemunculan pertama dalam seluruh Array.

public:
generic <typename T>
 static T Find(cli::array <T> ^ array, Predicate<T> ^ match);
public static T Find<T> (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

Jenis parameter

T

Jenis elemen array.

Parameter

array
T[]

Array berbasis nol satu dimensi untuk dicari.

match
Predicate<T>

Predikat yang menentukan kondisi elemen yang akan dicari.

Mengembalikan

T

Elemen pertama yang cocok dengan kondisi yang ditentukan oleh predikat yang ditentukan, jika ditemukan; jika tidak, nilai default untuk jenis T.

Pengecualian

array null.

-atau-

match null.

Contoh

Contoh berikut menggunakan delegasi Predicate<T> dengan metode generik Find untuk mencari array struktur Point. Metode yang diwakili delegasi, ProductGT10, mengembalikan true jika produk bidang X dan Y lebih besar dari 100.000. Metode Find memanggil delegasi untuk setiap elemen array, mengembalikan titik pertama yang memenuhi kondisi pengujian.

Nota

Pengguna Visual Basic, C#, dan F# tidak perlu membuat delegasi secara eksplisit atau menentukan argumen jenis metode generik. Kompilator menentukan jenis yang diperlukan dari argumen metode yang Anda berikan.

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

Daripada secara eksplisit mendefinisikan metode dengan tanda tangan yang diperlukan, membuat contoh delegasi Predicate<T>, dan meneruskan delegasi ke metode Find, itu adalah kebiasaan untuk menggunakan ekspresi lambda. Contoh berikut identik dengan yang sebelumnya, kecuali menggunakan ekspresi lambda sebagai argumen 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
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

Keterangan

Predicate<T> adalah delegasi ke metode atau ekspresi lambda yang mengembalikan true jika objek yang diteruskan ke metode tersebut cocok dengan kondisi yang ditentukan dalam delegasi atau ekspresi lambda. Elemen array secara individual diteruskan ke Predicate<T>, dimulai dengan elemen pertama dan diakhir dengan elemen terakhir. Pemrosesan dihentikan ketika kecocokan ditemukan.

Metode ini adalah operasi O(n), di mana n adalah Lengtharray.

Di F#, fungsi Array.find dapat digunakan sebagai gantinya.

Berlaku untuk

Lihat juga