Auf Englisch lesen

Freigeben über


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

Definition

Sucht nach einem Element, das den vom angegebenen Prädikat definierten Bedingungen entspricht, und gibt das letzte Vorkommen innerhalb der gesamten Arrayzurück.

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

Typparameter

T

Der Typ der Elemente des Arrays.

Parameter

array
T[]

Die eindimensionale, nullbasierte Array für die Suche.

match
Predicate<T>

Die Predicate<T>, die die Bedingungen des elements definiert, nach dem gesucht werden soll.

Gibt zurück

T

Das letzte Element, das den bedingungen entspricht, die durch das angegebene Prädikat definiert sind, falls gefunden; andernfalls der Standardwert für typ T.

Ausnahmen

array ist null.

-oder-

match ist null.

Beispiele

Im folgenden Codebeispiel werden die generischen Methoden Find, FindLastund FindAll veranschaulicht. Es wird ein Array von Zeichenfolgen erstellt, das 8 Dinosauriernamen enthält, von denen zwei (an den Positionen 1 und 5) mit "saurus" enden. Im Codebeispiel wird auch eine Suchprädikatmethode namens EndsWithSaurusdefiniert, die einen Zeichenfolgenparameter akzeptiert und einen booleschen Wert zurückgibt, der angibt, ob die Eingabezeichenfolge in "saurus" endet.

Die Find generische Methode durchläuft das Array von Anfang an und übergibt jedes Element wiederum an die EndsWithSaurus-Methode. Die Suche wird beendet, wenn die EndsWithSaurus-Methode true für das Element "Amargasaurus" zurückgibt.

Hinweis

In C# und Visual Basic ist es nicht erforderlich, denPredicate<string> Delegat (Predicate(Of String) in Visual Basic) explizit zu erstellen. In diesen Sprachen wird der richtige Delegat aus dem Kontext abgeleitet und automatisch erstellt.

Die FindLast generische Methode wird verwendet, um das Array rückwärts vom Ende zu durchsuchen. Es findet das Element "Dilophosaurus" an Position 5. Die FindAll generische Methode wird verwendet, um ein Array zurückzugeben, das alle Elemente enthält, die in "saurus" enden. Die Elemente werden angezeigt.

Im Codebeispiel werden auch die allgemeinen Methoden Exists und TrueForAll veranschaulicht.

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

Hinweise

Die Predicate<T> ist ein Delegat für eine Methode, die true zurückgibt, wenn das an sie übergebene Objekt den in der Stellvertretung definierten Bedingungen entspricht. Die Elemente von array werden einzeln an die Predicate<T>übergeben, die sich im Arrayrückwärts bewegen, beginnend mit dem letzten Element und enden mit dem ersten Element. Die Verarbeitung wird beendet, wenn eine Übereinstimmung gefunden wird.

Diese Methode ist ein O(n) Vorgang, wobei n die Length von arrayist.

Gilt für:

Produkt Versionen
.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

Weitere Informationen