Baca dalam bahasa Inggris

Bagikan melalui


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

Definisi

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

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

Jenis parameter

T

Jenis elemen array.

Parameter

array
T[]

Array berbasis nol satu dimensi untuk dicari.

match
Predicate<T>

Predicate<T> yang menentukan kondisi elemen yang akan dicari.

Mengembalikan

T

Elemen terakhir 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 kode berikut menunjukkan metode generik Find, FindLast, dan FindAll. Array string dibuat, berisi 8 nama dinosang, dua di antaranya (pada posisi 1 dan 5) berakhir dengan "saurus". Contoh kode juga mendefinisikan metode predikat pencarian bernama EndsWithSaurus, yang menerima parameter string dan mengembalikan nilai Boolean yang menunjukkan apakah string input berakhiran "saurus".

Metode generik Find melintasi array dari awal, meneruskan setiap elemen pada gilirannya ke metode EndsWithSaurus. Pencarian berhenti ketika metode EndsWithSaurus mengembalikan true untuk elemen "Amargasaurus".

Catatan

Di C# dan Visual Basic, tidak perlu membuat delegasiPredicate<string> (Predicate(Of String) di Visual Basic) secara eksplisit. Bahasa-bahasa ini menyimpulkan delegasi yang benar dari konteks dan membuatnya secara otomatis.

Metode generik FindLast digunakan untuk mencari array mundur dari akhir. Ini menemukan elemen "Dilophosaurus" pada posisi 5. Metode generik FindAll digunakan untuk mengembalikan array yang berisi semua elemen yang berakhiran "saurus". Elemen ditampilkan.

Contoh kode juga menunjukkan metode generik Exists dan TrueForAll.

using System;

public class DinoDiscoverySet
{
    public static void Main()
    {
        string[] dinosaurs =
        {
            "Compsognathus", "Amargasaurus", "Oviraptor",
            "Velociraptor",  "Deinonychus",  "Dilophosaurus",
            "Gallimimus",    "Triceratops"
        };

        DinoDiscoverySet GoMesozoic = new DinoDiscoverySet(dinosaurs);

        GoMesozoic.DiscoverAll();
        GoMesozoic.DiscoverByEnding("saurus");
    }

    private string[] dinosaurs;

    public DinoDiscoverySet(string[] items)
    {
        dinosaurs = items;
    }

    public void DiscoverAll()
    {
        Console.WriteLine();
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }
    }

    public void DiscoverByEnding(string Ending)
    {
        Predicate<string> dinoType;

        switch (Ending.ToLower())
        {
            case "raptor":
                dinoType = EndsWithRaptor;
                break;
            case "tops":
                dinoType = EndsWithTops;
                break;
            case "saurus":
            default:
                dinoType = EndsWithSaurus;
                break;
        }
        Console.WriteLine(
            "\nArray.Exists(dinosaurs, \"{0}\"): {1}",
            Ending,
            Array.Exists(dinosaurs, dinoType));

        Console.WriteLine(
            "\nArray.TrueForAll(dinosaurs, \"{0}\"): {1}",
            Ending,
            Array.TrueForAll(dinosaurs, dinoType));

        Console.WriteLine(
            "\nArray.Find(dinosaurs, \"{0}\"): {1}",
            Ending,
            Array.Find(dinosaurs, dinoType));

        Console.WriteLine(
            "\nArray.FindLast(dinosaurs, \"{0}\"): {1}",
            Ending,
            Array.FindLast(dinosaurs, dinoType));

        Console.WriteLine(
            "\nArray.FindAll(dinosaurs, \"{0}\"):", Ending);

        string[] subArray =
            Array.FindAll(dinosaurs, dinoType);

        foreach(string dinosaur in subArray)
        {
            Console.WriteLine(dinosaur);
        }
    }

    // Search predicate returns true if a string ends in "saurus".
    private bool EndsWithSaurus(string s)
    {
        if ((s.Length > 5) &&
            (s.Substring(s.Length - 6).ToLower() == "saurus"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    // Search predicate returns true if a string ends in "raptor".
    private bool EndsWithRaptor(String s)
    {
        if ((s.Length > 5) &&
            (s.Substring(s.Length - 6).ToLower() == "raptor"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    // Search predicate returns true if a string ends in "tops".
    private bool EndsWithTops(String s)
    {
        if ((s.Length > 3) &&
            (s.Substring(s.Length - 4).ToLower() == "tops"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

/* This code example produces the following output:

Compsognathus
Amargasaurus
Oviraptor
Velociraptor
Deinonychus
Dilophosaurus
Gallimimus
Triceratops

Array.Exists(dinosaurs, "saurus"): True

Array.TrueForAll(dinosaurs, "saurus"): False

Array.Find(dinosaurs, "saurus"): Amargasaurus

Array.FindLast(dinosaurs, "saurus"): Dilophosaurus

Array.FindAll(dinosaurs, "saurus"):
Amargasaurus
Dilophosaurus
*/

Keterangan

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

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

Berlaku untuk

Produk Versi
.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

Lihat juga