Leer en inglés

Compartir vía


Array.FindLast<T>(T[], Predicate<T>) Método

Definición

Busca un elemento que coincida con las condiciones definidas por el predicado especificado y devuelve la última aparición dentro de toda la Array.

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

Parámetros de tipo

T

Tipo de los elementos de la matriz.

Parámetros

array
T[]

La Array unidimensional basada en cero que se va a buscar.

match
Predicate<T>

El Predicate<T> que define las condiciones del elemento que se van a buscar.

Devoluciones

T

Último elemento que coincide con las condiciones definidas por el predicado especificado, si se encuentra; De lo contrario, el valor predeterminado para el tipo T.

Excepciones

array es null.

-o-

match es null.

Ejemplos

En el ejemplo de código siguiente se muestran los métodos genéricos Find, FindLasty FindAll. Se crea una matriz de cadenas, que contiene 8 nombres de dinosaurio, dos de los cuales (en las posiciones 1 y 5) terminan con "diccionario de sinónimos". El ejemplo de código también define un método de predicado de búsqueda denominado EndsWithSaurus, que acepta un parámetro de cadena y devuelve un valor booleano que indica si la cadena de entrada termina en "diccionario de sinónimos".

El método genérico Find recorre la matriz desde el principio, pasando cada elemento a su vez al método EndsWithSaurus. La búsqueda se detiene cuando el método EndsWithSaurus devuelve true para el elemento "Amargasaurus".

Nota

En C# y Visual Basic, no es necesario crear explícitamente el delegado dePredicate<string> (Predicate(Of String) en Visual Basic). Estos idiomas deducen el delegado correcto del contexto y lo crean automáticamente.

El FindLast método genérico se usa para buscar la matriz hacia atrás desde el final. Encuentra el elemento "Dilophosaurus" en la posición 5. El método genérico FindAll se usa para devolver una matriz que contiene todos los elementos que terminan en "diccionario de sinónimos". Se muestran los elementos.

En el ejemplo de código también se muestran los métodos genéricos Exists y TrueForAll.

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

Comentarios

El Predicate<T> es un delegado de un método que devuelve true si el objeto pasado a él coincide con las condiciones definidas en el delegado. Los elementos de array se pasan individualmente al Predicate<T>, pasando hacia atrás en el Array, empezando por el último elemento y finalizando con el primer elemento. El procesamiento se detiene cuando se encuentra una coincidencia.

Este método es una operación de O(n), donde n es el Length de array.

Se aplica a

Producto Versiones
.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

Consulte también