List<T>.FindIndex List<T>.FindIndex List<T>.FindIndex List<T>.FindIndex Method

Definição

Pesquisa um elemento que corresponda às condições definidas por um predicado especificado e retorna o índice baseado em zero da primeira ocorrência no List<T> ou parte dele.Searches for an element that matches the conditions defined by a specified predicate, and returns the zero-based index of the first occurrence within the List<T> or a portion of it. Esse método retornará -1 se não for encontrado um item que corresponda às condições.This method returns -1 if an item that matches the conditions is not found.

Sobrecargas

FindIndex(Predicate<T>) FindIndex(Predicate<T>) FindIndex(Predicate<T>) FindIndex(Predicate<T>)

Pesquisa um elemento que corresponde às condições definidas pelo predicado especificado e retorna o índice baseado em zero da primeira ocorrência em toda a List<T>.Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the first occurrence within the entire List<T>.

FindIndex(Int32, Predicate<T>) FindIndex(Int32, Predicate<T>) FindIndex(Int32, Predicate<T>) FindIndex(Int32, Predicate<T>)

Pesquisa um elemento que corresponda às condições definidas pelo predicado especificado e retorna o índice baseado em zero da primeira ocorrência dentro do intervalo de elementos no List<T> que se estende do índice especificado ao último elemento.Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the first occurrence within the range of elements in the List<T> that extends from the specified index to the last element.

FindIndex(Int32, Int32, Predicate<T>) FindIndex(Int32, Int32, Predicate<T>) FindIndex(Int32, Int32, Predicate<T>) FindIndex(Int32, Int32, Predicate<T>)

Pesquisa um elemento que coincida com as condições definidas pelo predicado especificado e retorna o índice baseado em zero da primeira ocorrência dentro do intervalo de elementos na List<T> que começa no índice especificado e contém o número de elementos especificado.Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the first occurrence within the range of elements in the List<T> that starts at the specified index and contains the specified number of elements.

FindIndex(Predicate<T>) FindIndex(Predicate<T>) FindIndex(Predicate<T>) FindIndex(Predicate<T>)

Pesquisa um elemento que corresponde às condições definidas pelo predicado especificado e retorna o índice baseado em zero da primeira ocorrência em toda a List<T>.Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the first occurrence within the entire List<T>.

public:
 int FindIndex(Predicate<T> ^ match);
public int FindIndex (Predicate<T> match);
member this.FindIndex : Predicate<'T> -> int
Public Function FindIndex (match As Predicate(Of T)) As Integer

Parâmetros

match
Predicate<T> Predicate<T> Predicate<T> Predicate<T>

O delegado Predicate<T> que define as condições do elemento a ser pesquisado.The Predicate<T> delegate that defines the conditions of the element to search for.

Retornos

O índice baseado em zero da primeira ocorrência de um elemento que corresponde às condições definidas por match, se for encontrado; caso contrário, -1.The zero-based index of the first occurrence of an element that matches the conditions defined by match, if found; otherwise, -1.

Exceções

Exemplos

O exemplo a seguir define Employee uma classe com dois Name campos e Id.The following example defines an Employee class with two fields, Name and Id. Ele também define uma EmployeeSearch classe com um único método, StartsWith, que indica se o Employee.Name campo começa com uma subcadeia de caracteres especificada que é fornecida EmployeeSearch para o construtor da classe.It also defines an EmployeeSearch class with a single method, StartsWith, that indicates whether the Employee.Name field starts with a specified substring that is supplied to the EmployeeSearch class constructor. Observe a assinatura desse métodoNote the signature of this method

public bool StartsWith(Employee e)  
Public Function StartsWith(e As Employee) As Boolean  

corresponde à assinatura do delegado que pode ser passado para o FindIndex método.corresponds to the signature of the delegate that can be passed to the FindIndex method. O exemplo List<Employee> instancia um objeto, adiciona um número de Employee objetos a ele e, em seguida, chama FindIndex(Int32, Int32, Predicate<T>) o método duas vezes para pesquisar a coleção inteira, a primeira vez para Employee o primeiro Name objeto cujo campo começa com "J" e a segunda vez para o primeiro Employee objeto cujo Name campo começa com "ju".The example instantiates a List<Employee> object, adds a number of Employee objects to it, and then calls the FindIndex(Int32, Int32, Predicate<T>) method twice to search the entire collection, the first time for the first Employee object whose Name field begins with "J", and the second time for the first Employee object whose Name field begins with "Ju".

using System;
using System.Collections.Generic;

public class Employee : IComparable
{
   public String Name { get; set; }
   public int Id { get; set; }

   public int CompareTo(Object o )
   {
      Employee e = o as Employee;
      if (e == null)
         throw new ArgumentException("o is not an Employee object.");

      return Name.CompareTo(e.Name);
   }
}

public class EmployeeSearch
{
   String _s;

   public EmployeeSearch(String s)
   {
      _s = s;
   }

   public bool StartsWith(Employee e)
   {
      return e.Name.StartsWith(_s, StringComparison.InvariantCultureIgnoreCase);
   }
}

public class Example
{
   public static void Main()
   {
      var employees = new List<Employee>();
      employees.AddRange( new Employee[] { new Employee { Name = "Frank", Id = 2 },
                                           new Employee { Name = "Jill", Id = 3 },
                                           new Employee { Name = "Dave", Id = 5 },
                                           new Employee { Name = "Jack", Id = 8 },
                                           new Employee { Name = "Judith", Id = 12 },
                                           new Employee { Name = "Robert", Id = 14 },
                                           new Employee { Name = "Adam", Id = 1 } } );
      employees.Sort();

      var es = new EmployeeSearch("J");
      Console.WriteLine("'J' starts at index {0}",
                        employees.FindIndex(es.StartsWith));

      es = new EmployeeSearch("Ju");
      Console.WriteLine("'Ju' starts at index {0}",
                        employees.FindIndex(es.StartsWith));
   }
}
// The example displays the following output:
//       'J' starts at index 3
//       'Ju' starts at index 5
Imports System.Collections.Generic

Public Class Employee : Implements IComparable
   Public Property Name As String
   Public Property Id As Integer
   
   Public Function CompareTo(o As Object) As Integer _
         Implements IComparable.CompareTo
      Dim e As Employee = TryCast(o, Employee)
      If e Is Nothing Then
         Throw New ArgumentException("o is not an Employee object.")
      End If

      Return Name.CompareTo(e.Name)
   End Function
End Class

Public Class EmployeeSearch
   Dim _s As String
   
   Public Sub New(s As String)
      _s = s
   End Sub
   
   Public Function StartsWith(e As Employee) As Boolean
      Return e.Name.StartsWith(_s, StringComparison.InvariantCultureIgnoreCase)
   End Function
End Class

Module Example
   Public Sub Main()
      Dim employees As New List(Of Employee)()
      employees.AddRange( { New Employee() With { .Name = "Frank", .Id = 2 },
                            New Employee() With { .Name = "Jill", .Id = 3 },
                            New Employee() With { .Name = "Dave", .Id = 5 },
                            New Employee() With { .Name = "Jack", .Id = 8 },
                            New Employee() With { .Name = "Judith", .Id = 12 },
                            New Employee() With { .Name = "Robert", .Id = 14 },
                            New Employee() With { .Name = "Adam", .Id = 1 } } )
      employees.Sort()

      Dim es As New EmployeeSearch("J")
      Console.WriteLine("'J' starts at index {0}",
                        employees.FindIndex(AddressOf es.StartsWith))
      es = New EmployeeSearch("Ju")
      Console.WriteLine("'Ju' starts at index {0}",
                        employees.FindIndex(AddressOf es.StartsWith))
   End Sub
End Module
' The example displays the following output:
'       'J' starts at index 3
'       'Ju' starts at index 5

Comentários

O List<T> é pesquisado em frente, começando no primeiro elemento e terminando no último elemento.The List<T> is searched forward starting at the first element and ending at the last element.

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.The Predicate<T> is a delegate to a method that returns true if the object passed to it matches the conditions defined in the delegate. Os elementos da atual List<T> são passados individualmente para o Predicate<T> delegado.The elements of the current List<T> are individually passed to the Predicate<T> delegate. O delegado tem a assinatura:The delegate has the signature:

public bool methodName(T obj)  
Public Function methodName(obj As T) As Boolean  

Esse método executa uma pesquisa linear; Portanto, esse método é uma operação O (n), onde n é Count.This method performs a linear search; therefore, this method is an O(n) operation, where n is Count.

Veja também

FindIndex(Int32, Predicate<T>) FindIndex(Int32, Predicate<T>) FindIndex(Int32, Predicate<T>) FindIndex(Int32, Predicate<T>)

Pesquisa um elemento que corresponda às condições definidas pelo predicado especificado e retorna o índice baseado em zero da primeira ocorrência dentro do intervalo de elementos no List<T> que se estende do índice especificado ao último elemento.Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the first occurrence within the range of elements in the List<T> that extends from the specified index to the last element.

public:
 int FindIndex(int startIndex, Predicate<T> ^ match);
public int FindIndex (int startIndex, Predicate<T> match);
member this.FindIndex : int * Predicate<'T> -> int
Public Function FindIndex (startIndex As Integer, match As Predicate(Of T)) As Integer

Parâmetros

startIndex
Int32 Int32 Int32 Int32

O índice inicial com base em zero da pesquisa.The zero-based starting index of the search.

match
Predicate<T> Predicate<T> Predicate<T> Predicate<T>

O delegado Predicate<T> que define as condições do elemento a ser pesquisado.The Predicate<T> delegate that defines the conditions of the element to search for.

Retornos

O índice baseado em zero da primeira ocorrência de um elemento que corresponde às condições definidas por match, se for encontrado; caso contrário, -1.The zero-based index of the first occurrence of an element that matches the conditions defined by match, if found; otherwise, -1.

Exceções

startIndex está fora do intervalo de índices válidos para o List<T>.startIndex is outside the range of valid indexes for the List<T>.

Exemplos

O exemplo a seguir define Employee uma classe com dois Name campos e Id.The following example defines an Employee class with two fields, Name and Id. Ele também define uma EmployeeSearch classe com um único método, StartsWith, que indica se o Employee.Name campo começa com uma subcadeia de caracteres especificada que é fornecida EmployeeSearch para o construtor da classe.It also defines an EmployeeSearch class with a single method, StartsWith, that indicates whether the Employee.Name field starts with a specified substring that is supplied to the EmployeeSearch class constructor. Observe a assinatura desse métodoNote the signature of this method

public bool StartsWith(Employee e)  
Public Function StartsWith(e As Employee) As Boolean  

corresponde à assinatura do delegado que pode ser passado para o FindIndex método.corresponds to the signature of the delegate that can be passed to the FindIndex method. O exemplo instancia um List<Employee> objeto, adiciona um número de Employee objetos a ele e, em seguida, chama FindIndex(Int32, Int32, Predicate<T>) o método duas vezes para pesquisar a coleção começando com seu quinto membro (ou seja, o membro no índice 4).The example instantiates a List<Employee> object, adds a number of Employee objects to it, and then calls the FindIndex(Int32, Int32, Predicate<T>) method twice to search the collection starting with its fifth member (that is, the member at index 4). Na primeira vez, ele Employee procura o primeiro objeto cujo Name campo começa com "J"; na segunda vez, ele pesquisa o primeiro Employee objeto cujo Name campo começa com "ju".The first time, it searches for the first Employee object whose Name field begins with "J"; the second time, it searches for the first Employee object whose Name field begins with "Ju".

using System;
using System.Collections.Generic;

public class Employee : IComparable
{
   public String Name { get; set; }
   public int Id { get; set; }

   public int CompareTo(Object o )
   {
      Employee e = o as Employee;
      if (e == null)
         throw new ArgumentException("o is not an Employee object.");

      return Name.CompareTo(e.Name);
   }
}

public class EmployeeSearch
{
   String _s;

   public EmployeeSearch(String s)
   {
      _s = s;
   }

   public bool StartsWith(Employee e)
   {
      return e.Name.StartsWith(_s, StringComparison.InvariantCultureIgnoreCase);
   }
}

public class Example
{
   public static void Main()
   {
      var employees = new List<Employee>();
      employees.AddRange( new Employee[] { new Employee { Name = "Frank", Id = 2 },
                                           new Employee { Name = "Jill", Id = 3 },
                                           new Employee { Name = "Dave", Id = 5 },
                                           new Employee { Name = "Jack", Id = 8 },
                                           new Employee { Name = "Judith", Id = 12 },
                                           new Employee { Name = "Robert", Id = 14 },
                                           new Employee { Name = "Adam", Id = 1 } } );
      employees.Sort();

      var es = new EmployeeSearch("J");
      int index = employees.FindIndex(4, es.StartsWith);        
      Console.WriteLine("Starting index of'J': {0}",
                        index >= 0 ? index.ToString() : "Not found");

      es = new EmployeeSearch("Ju");
      index = employees.FindIndex(4, es.StartsWith);        
      Console.WriteLine("Starting index of 'Ju': {0}",
                        index >= 0 ? index.ToString() : "Not found");
   }
}
// The example displays the following output:
//       'J' starts at index 4
//       'Ju' starts at index 5
Imports System.Collections.Generic

Public Class Employee : Implements IComparable
   Public Property Name As String
   Public Property Id As Integer
   
   Public Function CompareTo(o As Object) As Integer _
         Implements IComparable.CompareTo
      Dim e As Employee = TryCast(o, Employee)
      If e Is Nothing Then
         Throw New ArgumentException("o is not an Employee object.")
      End If

      Return Name.CompareTo(e.Name)
   End Function
End Class

Public Class EmployeeSearch
   Dim _s As String
   
   Public Sub New(s As String)
      _s = s
   End Sub
   
   Public Function StartsWith(e As Employee) As Boolean
      Return e.Name.StartsWith(_s, StringComparison.InvariantCultureIgnoreCase)
   End Function
End Class

Module Example
   Public Sub Main()
      Dim employees As New List(Of Employee)()
      employees.AddRange( { New Employee() With { .Name = "Frank", .Id = 2 },
                            New Employee() With { .Name = "Jill", .Id = 3 },
                            New Employee() With { .Name = "Dave", .Id = 5 },
                            New Employee() With { .Name = "Jack", .Id = 8 },
                            New Employee() With { .Name = "Judith", .Id = 12 },
                            New Employee() With { .Name = "Robert", .Id = 14 },
                            New Employee() With { .Name = "Adam", .Id = 1 } } )
      employees.Sort()

      Dim es As New EmployeeSearch("J")
      Dim index As Integer = employees.FindIndex(4, AddressOf es.StartsWith)        
      Console.WriteLine("Starting index of'J': {0}",
                        If(index >= 0, index.ToString(), "Not found"))

      es = New EmployeeSearch("Ju")
      index = employees.FindIndex(4, AddressOf es.StartsWith) 
      Console.WriteLine("Starting index of'Ju': {0}",
                        If(index >= 0, index.ToString(), "Not found"))

   End Sub
End Module
' The example displays the following output:
'       'J' starts at index 4
'       'Ju' starts at index 5

Comentários

O List<T> é pesquisado em startIndex direção inicial e terminando no último elemento.The List<T> is searched forward starting at startIndex and ending at the last element.

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.The Predicate<T> is a delegate to a method that returns true if the object passed to it matches the conditions defined in the delegate. Os elementos da atual List<T> são passados individualmente para o Predicate<T> delegado.The elements of the current List<T> are individually passed to the Predicate<T> delegate. O delegado tem a assinatura:The delegate has the signature:

public bool methodName(T obj)  
Public Function methodName(obj As T) As Boolean  

Esse método executa uma pesquisa linear; Portanto, esse método é uma operação o (n), em que n é o número de elementos startIndex de até o final do List<T>.This method performs a linear search; therefore, this method is an O(n) operation, where n is the number of elements from startIndex to the end of the List<T>.

Veja também

FindIndex(Int32, Int32, Predicate<T>) FindIndex(Int32, Int32, Predicate<T>) FindIndex(Int32, Int32, Predicate<T>) FindIndex(Int32, Int32, Predicate<T>)

Pesquisa um elemento que coincida com as condições definidas pelo predicado especificado e retorna o índice baseado em zero da primeira ocorrência dentro do intervalo de elementos na List<T> que começa no índice especificado e contém o número de elementos especificado.Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the first occurrence within the range of elements in the List<T> that starts at the specified index and contains the specified number of elements.

public:
 int FindIndex(int startIndex, int count, Predicate<T> ^ match);
public int FindIndex (int startIndex, int count, Predicate<T> match);
member this.FindIndex : int * int * Predicate<'T> -> int
Public Function FindIndex (startIndex As Integer, count As Integer, match As Predicate(Of T)) As Integer

Parâmetros

startIndex
Int32 Int32 Int32 Int32

O índice inicial com base em zero da pesquisa.The zero-based starting index of the search.

count
Int32 Int32 Int32 Int32

O número de elementos na seção a ser pesquisada.The number of elements in the section to search.

match
Predicate<T> Predicate<T> Predicate<T> Predicate<T>

O delegado Predicate<T> que define as condições do elemento a ser pesquisado.The Predicate<T> delegate that defines the conditions of the element to search for.

Retornos

O índice baseado em zero da primeira ocorrência de um elemento que corresponde às condições definidas por match, se for encontrado; caso contrário, -1.The zero-based index of the first occurrence of an element that matches the conditions defined by match, if found; otherwise, -1.

Exceções

startIndex está fora do intervalo de índices válidos para o List<T>.startIndex is outside the range of valid indexes for the List<T>.

- ou --or- count é menor que 0.count is less than 0.

- ou --or- startIndex e count não especificam uma seção válida no List<T>.startIndex and count do not specify a valid section in the List<T>.

Exemplos

O exemplo a seguir define Employee uma classe com dois Name campos e Id.The following example defines an Employee class with two fields, Name and Id. Ele também define uma EmployeeSearch classe com um único método, StartsWith, que indica se o Employee.Name campo começa com uma subcadeia de caracteres especificada que é fornecida EmployeeSearch para o construtor da classe.It also defines an EmployeeSearch class with a single method, StartsWith, that indicates whether the Employee.Name field starts with a specified substring that is supplied to the EmployeeSearch class constructor. Observe a assinatura desse métodoNote the signature of this method

public bool StartsWith(Employee e)  
Public Function StartsWith(e As Employee) As Boolean  

corresponde à assinatura do delegado que pode ser passado para o FindIndex método.corresponds to the signature of the delegate that can be passed to the FindIndex method. List<Employee> O exemplo instancia um objeto, adiciona um número de Employee objetos a ele e, em seguida, chama FindIndex(Int32, Int32, Predicate<T>) o método duas vezes para pesquisar a coleção inteira (ou seja, os membros do índice 0 Count para index-1).The example instantiates a List<Employee> object, adds a number of Employee objects to it, and then calls the FindIndex(Int32, Int32, Predicate<T>) method twice to search the entire collection (that is, the members from index 0 to index Count - 1). Na primeira vez, ele Employee procura o primeiro objeto cujo Name campo começa com "J"; na segunda vez, ele pesquisa o primeiro Employee objeto cujo Name campo começa com "ju".The first time, it searches for the first Employee object whose Name field begins with "J"; the second time, it searches for the first Employee object whose Name field begins with "Ju".

using System;
using System.Collections.Generic;

public class Employee : IComparable
{
   public String Name { get; set; }
   public int Id { get; set; }

   public int CompareTo(Object o )
   {
      Employee e = o as Employee;
      if (e == null)
         throw new ArgumentException("o is not an Employee object.");

      return Name.CompareTo(e.Name);
   }
}

public class EmployeeSearch
{
   String _s;

   public EmployeeSearch(String s)
   {
      _s = s;
   }

   public bool StartsWith(Employee e)
   {
      return e.Name.StartsWith(_s, StringComparison.InvariantCultureIgnoreCase);
   }
}

public class Example
{
   public static void Main()
   {
      var employees = new List<Employee>();
      employees.AddRange( new Employee[] { new Employee { Name = "Frank", Id = 2 },
                                           new Employee { Name = "Jill", Id = 3 },
                                           new Employee { Name = "Dave", Id = 5 },
                                           new Employee { Name = "Jack", Id = 8 },
                                           new Employee { Name = "Judith", Id = 12 },
                                           new Employee { Name = "Robert", Id = 14 },
                                           new Employee { Name = "Adam", Id = 1 } } );
      employees.Sort();

      var es = new EmployeeSearch("J");
      Console.WriteLine("'J' starts at index {0}",
                        employees.FindIndex(0, employees.Count - 1, es.StartsWith));

      es = new EmployeeSearch("Ju");
      Console.WriteLine("'Ju' starts at index {0}",
                        employees.FindIndex(0, employees.Count - 1,es.StartsWith));
   }
}
// The example displays the following output:
//       'J' starts at index 3
//       'Ju' starts at index 5
Imports System.Collections.Generic

Public Class Employee : Implements IComparable
   Public Property Name As String
   Public Property Id As Integer
   
   Public Function CompareTo(o As Object) As Integer _
         Implements IComparable.CompareTo
      Dim e As Employee = TryCast(o, Employee)
      If e Is Nothing Then
         Throw New ArgumentException("o is not an Employee object.")
      End If

      Return Name.CompareTo(e.Name)
   End Function
End Class

Public Class EmployeeSearch
   Dim _s As String
   
   Public Sub New(s As String)
      _s = s
   End Sub
   
   Public Function StartsWith(e As Employee) As Boolean
      Return e.Name.StartsWith(_s, StringComparison.InvariantCultureIgnoreCase)
   End Function
End Class

Module Example
   Public Sub Main()
      Dim employees As New List(Of Employee)()
      employees.AddRange( { New Employee() With { .Name = "Frank", .Id = 2 },
                            New Employee() With { .Name = "Jill", .Id = 3 },
                            New Employee() With { .Name = "Dave", .Id = 5 },
                            New Employee() With { .Name = "Jack", .Id = 8 },
                            New Employee() With { .Name = "Judith", .Id = 12 },
                            New Employee() With { .Name = "Robert", .Id = 14 },
                            New Employee() With { .Name = "Adam", .Id = 1 } } )
      employees.Sort()

      Dim es As New EmployeeSearch("J")
      Console.WriteLine("'J' starts at index {0}",
                        employees.FindIndex(0, employees.Count - 1,
                                            AddressOf es.StartsWith))
      es = New EmployeeSearch("Ju")
      Console.WriteLine("'Ju' starts at index {0}",
                        employees.FindIndex(0, employees.Count - 1,
                                            AddressOf es.StartsWith))
   End Sub
End Module
' The example displays the following output:
'       'J' starts at index 3
'       'Ju' starts at index 5

Comentários

O List<T> é pesquisado a partir startIndex de e terminando count em startIndex mais de 1 count , se for maior que 0.The List<T> is searched forward starting at startIndex and ending at startIndex plus count minus 1, if count is greater than 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.The Predicate<T> is a delegate to a method that returns true if the object passed to it matches the conditions defined in the delegate. Os elementos da atual List<T> são passados individualmente para o Predicate<T> delegado.The elements of the current List<T> are individually passed to the Predicate<T> delegate. O delegado tem a assinatura:The delegate has the signature:

public bool methodName(T obj)  
Public Function methodName(obj As T) As Boolean  

Esse método executa uma pesquisa linear; Portanto, esse método é uma operação O (n), onde n é count.This method performs a linear search; therefore, this method is an O(n) operation, where n is count.

Veja também

Aplica-se a