List<T>.FindLastIndex Método

Definición

Busca un elemento que cumpla las condiciones definidas por el predicado especificado y devuelve el índice de base cero de la última aparición en List<T> o en una parte.

Sobrecargas

FindLastIndex(Predicate<T>)

Busca un elemento que coincida con las condiciones definidas por el predicado especificado y devuelve el índice de base cero de la última aparición en toda la matriz List<T>.

FindLastIndex(Int32, Predicate<T>)

Busca un elemento que coincida con las condiciones definidas por el predicado especificado y devuelve el índice de base cero de la última aparición en el intervalo de elementos de la matriz List<T> que va desde el primer elemento hasta el índice especificado.

FindLastIndex(Int32, Int32, Predicate<T>)

Busca un elemento que coincida con las condiciones definidas por el predicado especificado y devuelve el índice de base cero de la última aparición en el intervalo de elementos de la matriz List<T> que contiene el número especificado de elementos y termina en el índice especificado.

FindLastIndex(Predicate<T>)

Source:
List.cs
Source:
List.cs
Source:
List.cs

Busca un elemento que coincida con las condiciones definidas por el predicado especificado y devuelve el índice de base cero de la última aparición en toda la matriz List<T>.

C#
public int FindLastIndex (Predicate<T> match);

Parámetros

match
Predicate<T>

Delegado Predicate<T> que define las condiciones del elemento que se va a buscar.

Devoluciones

Índice de base cero de la última aparición de un elemento que coincide con las condiciones definidas por match, si se encuentra; en caso contrario, -1.

Excepciones

match es null.

Ejemplos

En el ejemplo siguiente se muestran los métodos find de la List<T> clase . El ejemplo de la List<T> clase contiene book objetos, de clase Book, utilizando los datos del archivo XML de ejemplo: Libros (LINQ to XML) . El FillList método del ejemplo usa LINQ to XML para analizar los valores del XML a los valores de propiedad de los book objetos.

En la tabla siguiente se describen los ejemplos proporcionados para los métodos find.

Método Ejemplo
Find(Predicate<T>) Busca un libro mediante un identificador mediante el delegado de IDToFind predicado.

En el ejemplo de C# se usa un delegado anónimo.
FindAll(Predicate<T>) Busque todos los libros cuya Genre propiedad es "Computer" mediante el delegado de FindComputer predicado.
FindLast(Predicate<T>) Busca el último libro de la colección que tiene una fecha de publicación anterior a 2001, mediante el delegado de PubBefore2001 predicado.

En el ejemplo de C# se usa un delegado anónimo.
FindIndex(Predicate<T>) Busca el índice de la primera libreta de equipos mediante el delegado de FindComputer predicado.
FindLastIndex(Predicate<T>) Busca el índice del último libro de equipos mediante el delegado de FindComputer predicado.
FindIndex(Int32, Int32, Predicate<T>) Busca el índice del primer libro de equipos en la segunda mitad de la colección, utilizando el delegado de FindComputer predicado.
FindLastIndex(Int32, Int32, Predicate<T>) Busca el índice del último libro de equipos en la segunda mitad de la colección, utilizando el delegado de FindComputer predicado.
C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;

namespace Find
{
    class Program
    {
        private static string IDtoFind = "bk109";

        private static List<Book> Books = new List<Book>();
        public static void Main(string[] args)
        {
            FillList();

            // Find a book by its ID.
            Book result = Books.Find(
            delegate(Book bk)
            {
                return bk.ID == IDtoFind;
            }
            );
            if (result != null)
            {
                DisplayResult(result, "Find by ID: " + IDtoFind);
            }
            else
            {
                Console.WriteLine("\nNot found: {0}", IDtoFind);
            }

            // Find last book in collection published before 2001.
            result = Books.FindLast(
            delegate(Book bk)
            {
                DateTime year2001 = new DateTime(2001,01,01);
                return bk.Publish_date < year2001;
            });
            if (result != null)
            {
                DisplayResult(result, "Last book in collection published before 2001:");
            }
            else
            {
                Console.WriteLine("\nNot found: {0}", IDtoFind);
            }

            // Find all computer books.
            List<Book> results = Books.FindAll(FindComputer);
            if (results.Count != 0)
            {
                DisplayResults(results, "All computer:");
            }
            else
            {
                Console.WriteLine("\nNo books found.");
            }

            // Find all books under $10.00.
            results = Books.FindAll(
            delegate(Book bk)
            {
                return bk.Price < 10.00;
            }
            );
            if (results.Count != 0)
            {
                DisplayResults(results, "Books under $10:");
            }
            else
            {
                Console.WriteLine("\nNo books found.");
            }

            // Find index values.
            Console.WriteLine();
            int ndx = Books.FindIndex(FindComputer);
            Console.WriteLine("Index of first computer book: {0}", ndx);
            ndx = Books.FindLastIndex(FindComputer);
            Console.WriteLine("Index of last computer book: {0}", ndx);

            int mid = Books.Count / 2;
            ndx = Books.FindIndex(mid, mid, FindComputer);
            Console.WriteLine("Index of first computer book in the second half of the collection: {0}", ndx);

            ndx = Books.FindLastIndex(Books.Count - 1, mid, FindComputer);
            Console.WriteLine("Index of last computer book in the second half of the collection: {0}", ndx);
        }

        // Populates the list with sample data.
        private static void FillList()
        {

            // Create XML elements from a source file.
            XElement xTree = XElement.Load(@"c:\temp\books.xml");

            // Create an enumerable collection of the elements.
            IEnumerable<XElement> elements = xTree.Elements();

            // Evaluate each element and set set values in the book object.
            foreach (XElement el in elements)
            {
                Book book = new Book();
                book.ID = el.Attribute("id").Value;
                IEnumerable<XElement> props = el.Elements();
                foreach (XElement p in props)
                {

                    if (p.Name.ToString().ToLower() == "author")
                    {
                        book.Author = p.Value;
                    }
                    else if (p.Name.ToString().ToLower() == "title")
                    {
                        book.Title = p.Value;
                    }
                    else if (p.Name.ToString().ToLower() == "genre")
                    {
                        book.Genre = p.Value;
                    }
                    else if (p.Name.ToString().ToLower() == "price")
                    {
                        book.Price = Convert.ToDouble(p.Value);
                    }
                    else if (p.Name.ToString().ToLower() == "publish_date")
                    {
                        book.Publish_date = Convert.ToDateTime(p.Value);
                    }
                    else if (p.Name.ToString().ToLower() == "description")
                    {
                        book.Description = p.Value;
                    }
                }

                Books.Add(book);
            }

            DisplayResults(Books, "All books:");
        }

        // Explicit predicate delegate.
        private static bool FindComputer(Book bk)
        {

            if (bk.Genre == "Computer")
            {
                return true;
            }
        else
            {
                return false;
            }
        }

        private static void DisplayResult(Book result, string title)
        {
            Console.WriteLine();
            Console.WriteLine(title);
            Console.WriteLine("\n{0}\t{1}\t{2}\t{3}\t{4}\t{5}", result.ID,
                result.Author, result.Title, result.Genre, result.Price,
                result.Publish_date.ToShortDateString());
            Console.WriteLine();
        }

        private static void DisplayResults(List<Book> results, string title)
        {
            Console.WriteLine();
            Console.WriteLine(title);
            foreach (Book b in results)
            {

                Console.Write("\n{0}\t{1}\t{2}\t{3}\t{4}\t{5}", b.ID,
                    b.Author, b.Title, b.Genre, b.Price,
                    b.Publish_date.ToShortDateString());
            }
            Console.WriteLine();
        }
    }

    public class Book
    {
        public string ID { get; set; }
        public string Author { get; set; }
        public string Title { get; set; }
        public string Genre { get; set; }
        public double Price { get; set; }
        public DateTime Publish_date { get; set; }
        public string Description { get; set; }
    }
}

Comentarios

List<T> se busca hacia atrás a partir del último elemento y finaliza en el primer elemento.

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 del actual List<T> se pasan individualmente al Predicate<T> delegado.

Este método realiza una búsqueda lineal; por lo tanto, este método es una operación de O(n), donde n es Count.

Consulte también

Se aplica a

.NET 9 y otras versiones
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
.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.6, 2.0, 2.1
UWP 10.0

FindLastIndex(Int32, Predicate<T>)

Source:
List.cs
Source:
List.cs
Source:
List.cs

Busca un elemento que coincida con las condiciones definidas por el predicado especificado y devuelve el índice de base cero de la última aparición en el intervalo de elementos de la matriz List<T> que va desde el primer elemento hasta el índice especificado.

C#
public int FindLastIndex (int startIndex, Predicate<T> match);

Parámetros

startIndex
Int32

Índice inicial de base cero de la búsqueda hacia atrás.

match
Predicate<T>

Delegado Predicate<T> que define las condiciones del elemento que se va a buscar.

Devoluciones

Índice de base cero de la última aparición de un elemento que coincide con las condiciones definidas por match, si se encuentra; en caso contrario, -1.

Excepciones

match es null.

startIndex está fuera del intervalo de índices válidos para List<T>.

Comentarios

List<T> se busca hacia atrás a partir startIndex de y finaliza en el primer elemento.

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 del actual List<T> se pasan individualmente al Predicate<T> delegado.

Este método realiza una búsqueda lineal; por lo tanto, este método es una operación de O(n), donde n es el número de elementos desde el principio de List<T> a startIndex.

Consulte también

Se aplica a

.NET 9 y otras versiones
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
.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.6, 2.0, 2.1
UWP 10.0

FindLastIndex(Int32, Int32, Predicate<T>)

Source:
List.cs
Source:
List.cs
Source:
List.cs

Busca un elemento que coincida con las condiciones definidas por el predicado especificado y devuelve el índice de base cero de la última aparición en el intervalo de elementos de la matriz List<T> que contiene el número especificado de elementos y termina en el índice especificado.

C#
public int FindLastIndex (int startIndex, int count, Predicate<T> match);

Parámetros

startIndex
Int32

Índice inicial de base cero de la búsqueda hacia atrás.

count
Int32

Número de elementos de la sección en la que se va a realizar la búsqueda.

match
Predicate<T>

Delegado Predicate<T> que define las condiciones del elemento que se va a buscar.

Devoluciones

Índice de base cero de la última aparición de un elemento que coincide con las condiciones definidas por match, si se encuentra; en caso contrario, -1.

Excepciones

match es null.

startIndex está fuera del intervalo de índices válidos para List<T>.

o bien

count es menor que 0.

o bien

startIndex y count no especifican una sección válida en List<T>.

Ejemplos

En el ejemplo siguiente se muestran los métodos find de la List<T> clase . El ejemplo de la List<T> clase contiene book objetos, de clase Book, utilizando los datos del archivo XML de ejemplo: Libros (LINQ to XML) . El FillList método del ejemplo usa LINQ to XML para analizar los valores del XML a los valores de propiedad de los book objetos.

En la tabla siguiente se describen los ejemplos proporcionados para los métodos find.

Método Ejemplo
Find(Predicate<T>) Busca un libro mediante un identificador mediante el delegado de IDToFind predicado.

En el ejemplo de C# se usa un delegado anónimo.
FindAll(Predicate<T>) Busque todos los libros cuya Genre propiedad es "Computer" mediante el delegado de FindComputer predicado.
FindLast(Predicate<T>) Busca el último libro de la colección que tiene una fecha de publicación anterior a 2001, mediante el delegado de PubBefore2001 predicado.

En el ejemplo de C# se usa un delegado anónimo.
FindIndex(Predicate<T>) Busca el índice de la primera libreta de equipos mediante el delegado de FindComputer predicado.
FindLastIndex(Predicate<T>) Busca el índice del último libro de equipos mediante el delegado de FindComputer predicado.
FindIndex(Int32, Int32, Predicate<T>) Busca el índice del primer libro de equipos en la segunda mitad de la colección, utilizando el delegado de FindComputer predicado.
FindLastIndex(Int32, Int32, Predicate<T>) Busca el índice del último libro de equipos en la segunda mitad de la colección, utilizando el delegado de FindComputer predicado.
C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;

namespace Find
{
    class Program
    {
        private static string IDtoFind = "bk109";

        private static List<Book> Books = new List<Book>();
        public static void Main(string[] args)
        {
            FillList();

            // Find a book by its ID.
            Book result = Books.Find(
            delegate(Book bk)
            {
                return bk.ID == IDtoFind;
            }
            );
            if (result != null)
            {
                DisplayResult(result, "Find by ID: " + IDtoFind);
            }
            else
            {
                Console.WriteLine("\nNot found: {0}", IDtoFind);
            }

            // Find last book in collection published before 2001.
            result = Books.FindLast(
            delegate(Book bk)
            {
                DateTime year2001 = new DateTime(2001,01,01);
                return bk.Publish_date < year2001;
            });
            if (result != null)
            {
                DisplayResult(result, "Last book in collection published before 2001:");
            }
            else
            {
                Console.WriteLine("\nNot found: {0}", IDtoFind);
            }

            // Find all computer books.
            List<Book> results = Books.FindAll(FindComputer);
            if (results.Count != 0)
            {
                DisplayResults(results, "All computer:");
            }
            else
            {
                Console.WriteLine("\nNo books found.");
            }

            // Find all books under $10.00.
            results = Books.FindAll(
            delegate(Book bk)
            {
                return bk.Price < 10.00;
            }
            );
            if (results.Count != 0)
            {
                DisplayResults(results, "Books under $10:");
            }
            else
            {
                Console.WriteLine("\nNo books found.");
            }

            // Find index values.
            Console.WriteLine();
            int ndx = Books.FindIndex(FindComputer);
            Console.WriteLine("Index of first computer book: {0}", ndx);
            ndx = Books.FindLastIndex(FindComputer);
            Console.WriteLine("Index of last computer book: {0}", ndx);

            int mid = Books.Count / 2;
            ndx = Books.FindIndex(mid, mid, FindComputer);
            Console.WriteLine("Index of first computer book in the second half of the collection: {0}", ndx);

            ndx = Books.FindLastIndex(Books.Count - 1, mid, FindComputer);
            Console.WriteLine("Index of last computer book in the second half of the collection: {0}", ndx);
        }

        // Populates the list with sample data.
        private static void FillList()
        {

            // Create XML elements from a source file.
            XElement xTree = XElement.Load(@"c:\temp\books.xml");

            // Create an enumerable collection of the elements.
            IEnumerable<XElement> elements = xTree.Elements();

            // Evaluate each element and set set values in the book object.
            foreach (XElement el in elements)
            {
                Book book = new Book();
                book.ID = el.Attribute("id").Value;
                IEnumerable<XElement> props = el.Elements();
                foreach (XElement p in props)
                {

                    if (p.Name.ToString().ToLower() == "author")
                    {
                        book.Author = p.Value;
                    }
                    else if (p.Name.ToString().ToLower() == "title")
                    {
                        book.Title = p.Value;
                    }
                    else if (p.Name.ToString().ToLower() == "genre")
                    {
                        book.Genre = p.Value;
                    }
                    else if (p.Name.ToString().ToLower() == "price")
                    {
                        book.Price = Convert.ToDouble(p.Value);
                    }
                    else if (p.Name.ToString().ToLower() == "publish_date")
                    {
                        book.Publish_date = Convert.ToDateTime(p.Value);
                    }
                    else if (p.Name.ToString().ToLower() == "description")
                    {
                        book.Description = p.Value;
                    }
                }

                Books.Add(book);
            }

            DisplayResults(Books, "All books:");
        }

        // Explicit predicate delegate.
        private static bool FindComputer(Book bk)
        {

            if (bk.Genre == "Computer")
            {
                return true;
            }
        else
            {
                return false;
            }
        }

        private static void DisplayResult(Book result, string title)
        {
            Console.WriteLine();
            Console.WriteLine(title);
            Console.WriteLine("\n{0}\t{1}\t{2}\t{3}\t{4}\t{5}", result.ID,
                result.Author, result.Title, result.Genre, result.Price,
                result.Publish_date.ToShortDateString());
            Console.WriteLine();
        }

        private static void DisplayResults(List<Book> results, string title)
        {
            Console.WriteLine();
            Console.WriteLine(title);
            foreach (Book b in results)
            {

                Console.Write("\n{0}\t{1}\t{2}\t{3}\t{4}\t{5}", b.ID,
                    b.Author, b.Title, b.Genre, b.Price,
                    b.Publish_date.ToShortDateString());
            }
            Console.WriteLine();
        }
    }

    public class Book
    {
        public string ID { get; set; }
        public string Author { get; set; }
        public string Title { get; set; }
        public string Genre { get; set; }
        public double Price { get; set; }
        public DateTime Publish_date { get; set; }
        public string Description { get; set; }
    }
}

Comentarios

List<T> Se busca hacia atrás a partir startIndex de y termina en startIndex menos count más 1, si count es mayor que 0.

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 del actual List<T> se pasan individualmente al Predicate<T> delegado.

Este método realiza una búsqueda lineal; por lo tanto, este método es una operación de O(n), donde n es count.

Consulte también

Se aplica a

.NET 9 y otras versiones
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
.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.6, 2.0, 2.1
UWP 10.0