List<T>.FindLastIndex Método

Definição

Pesquisa um elemento que corresponda às condições definidas por um predicado especificado e retorna o índice baseado em zero da última ocorrência no List<T> ou parte dele.

Sobrecargas

FindLastIndex(Predicate<T>)

Pesquisa um elemento que corresponde às condições definidas pelo predicado especificado e retorna o índice baseado em zero da última ocorrência em toda a List<T>.

FindLastIndex(Int32, Predicate<T>)

Pesquisa um elemento que corresponde às condições definidas pelo predicado especificado e retorna o índice baseado em zero da última ocorrência dentro do intervalo de elementos no List<T> que se estende do primeiro elemento ao índice especificado.

FindLastIndex(Int32, Int32, Predicate<T>)

Pesquisa por um elemento que corresponda às condições definidas pelo predicado especificado e retorna o índice baseado em zero da última ocorrência no intervalo de elementos no List<T> que contém o número de elementos especificado e termina no índice especificado.

FindLastIndex(Predicate<T>)

Origem:
List.cs
Origem:
List.cs
Origem:
List.cs

Pesquisa um elemento que corresponde às condições definidas pelo predicado especificado e retorna o índice baseado em zero da última ocorrência em toda a List<T>.

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

Parâmetros

match
Predicate<T>

O delegado Predicate<T> que define as condições do elemento a ser pesquisado.

Retornos

O índice de base zero da última ocorrência de um elemento que corresponde às condições definidas por match, se for encontrado; caso contrário, -1.

Exceções

match é null.

Exemplos

O exemplo a seguir demonstra os métodos find para a List<T> classe . O exemplo para a List<T> classe contém book objetos, da classe Book, usando os dados do Arquivo XML de Exemplo: Livros (LINQ to XML). O FillList método no exemplo usa LINQ to XML para analisar os valores do XML para os valores de propriedade dos book objetos.

A tabela a seguir descreve os exemplos fornecidos para os métodos find.

Método Exemplo
Find(Predicate<T>) Localiza um livro por uma ID usando o delegado de IDToFind predicado.

O exemplo de C# usa um delegado anônimo.
FindAll(Predicate<T>) Encontre todos os livros cuja Genre propriedade é "Computador" usando o delegado de FindComputer predicado.
FindLast(Predicate<T>) Localiza o último livro na coleção que tem uma data de publicação antes de 2001, usando o delegado de PubBefore2001 predicado.

O exemplo de C# usa um delegado anônimo.
FindIndex(Predicate<T>) Localiza o índice do primeiro livro do computador usando o delegado de FindComputer predicado.
FindLastIndex(Predicate<T>) Localiza o índice do último livro do computador usando o delegado de FindComputer predicado.
FindIndex(Int32, Int32, Predicate<T>) Localiza o índice do primeiro livro de computador na segunda metade da coleção, usando o delegado de FindComputer predicado.
FindLastIndex(Int32, Int32, Predicate<T>) Localiza o índice do último livro de computador na segunda metade da coleção, usando o 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; }
    }
}

Comentários

O List<T> é pesquisado para trás começando no último elemento e terminando no primeiro elemento.

O Predicate<T> é um representante para um método que retorna true caso o objeto passado para ele corresponda às condições definidas no representante. Os elementos do atual List<T> são passados individualmente para o Predicate<T> delegado.

Esse método executa uma pesquisa linear; portanto, esse método é uma operação O(n), em que n é Count.

Confira também

Aplica-se a

.NET 9 e outras versões
Produto Versões
.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>)

Origem:
List.cs
Origem:
List.cs
Origem:
List.cs

Pesquisa um elemento que corresponde às condições definidas pelo predicado especificado e retorna o índice baseado em zero da última ocorrência dentro do intervalo de elementos no List<T> que se estende do primeiro elemento ao índice especificado.

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

Parâmetros

startIndex
Int32

O índice inicial com base em zero da pesquisa inversa.

match
Predicate<T>

O delegado Predicate<T> que define as condições do elemento a ser pesquisado.

Retornos

O índice de base zero da última ocorrência de um elemento que corresponde às condições definidas por match, se for encontrado; caso contrário, -1.

Exceções

match é null.

startIndex está fora do intervalo de índices válidos para o List<T>.

Comentários

O List<T> é pesquisado para trás, começando em startIndex e terminando no primeiro elemento.

O Predicate<T> é um representante para um método que retorna true caso o objeto passado para ele corresponda às condições definidas no representante. Os elementos do atual List<T> são passados individualmente para o Predicate<T> delegado.

Esse método executa uma pesquisa linear; portanto, esse método é uma operação O(n), em que n é o número de elementos do início do List<T> para startIndex.

Confira também

Aplica-se a

.NET 9 e outras versões
Produto Versões
.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>)

Origem:
List.cs
Origem:
List.cs
Origem:
List.cs

Pesquisa por um elemento que corresponda às condições definidas pelo predicado especificado e retorna o índice baseado em zero da última ocorrência no intervalo de elementos no List<T> que contém o número de elementos especificado e termina no índice especificado.

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

Parâmetros

startIndex
Int32

O índice inicial com base em zero da pesquisa inversa.

count
Int32

O número de elementos na seção a ser pesquisada.

match
Predicate<T>

O delegado Predicate<T> que define as condições do elemento a ser pesquisado.

Retornos

O índice de base zero da última ocorrência de um elemento que corresponde às condições definidas por match, se for encontrado; caso contrário, -1.

Exceções

match é null.

startIndex está fora do intervalo de índices válidos para o List<T>.

- ou -

count é menor que 0.

- ou -

startIndex e count não especificam uma seção válida no List<T>.

Exemplos

O exemplo a seguir demonstra os métodos find para a List<T> classe . O exemplo para a List<T> classe contém book objetos, da classe Book, usando os dados do Arquivo XML de Exemplo: Livros (LINQ to XML). O FillList método no exemplo usa LINQ to XML para analisar os valores do XML para os valores de propriedade dos book objetos.

A tabela a seguir descreve os exemplos fornecidos para os métodos find.

Método Exemplo
Find(Predicate<T>) Localiza um livro por uma ID usando o delegado de IDToFind predicado.

O exemplo de C# usa um delegado anônimo.
FindAll(Predicate<T>) Encontre todos os livros cuja Genre propriedade é "Computador" usando o delegado de FindComputer predicado.
FindLast(Predicate<T>) Localiza o último livro na coleção que tem uma data de publicação antes de 2001, usando o delegado de PubBefore2001 predicado.

O exemplo de C# usa um delegado anônimo.
FindIndex(Predicate<T>) Localiza o índice do primeiro livro do computador usando o delegado de FindComputer predicado.
FindLastIndex(Predicate<T>) Localiza o índice do último livro do computador usando o delegado de FindComputer predicado.
FindIndex(Int32, Int32, Predicate<T>) Localiza o índice do primeiro livro de computador na segunda metade da coleção, usando o delegado de FindComputer predicado.
FindLastIndex(Int32, Int32, Predicate<T>) Localiza o índice do último livro de computador na segunda metade da coleção, usando o 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; }
    }
}

Comentários

O List<T> é pesquisado para trás começando em startIndex e terminando em startIndex menos count mais 1, se count for maior que 0.

O Predicate<T> é um representante para um método que retorna true caso o objeto passado para ele corresponda às condições definidas no representante. Os elementos do atual List<T> são passados individualmente para o Predicate<T> delegado.

Esse método executa uma pesquisa linear; portanto, esse método é uma operação O(n), em que n é count.

Confira também

Aplica-se a

.NET 9 e outras versões
Produto Versões
.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