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

Определение

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс первого найденного вхождения в пределах всего списка List<T> или его части.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. Этот метод возвращает значение -1, если соответствующий условию элемент не найден.This method returns -1 if an item that matches the conditions is not found.

Перегрузки

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

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс первого найденного вхождения в пределах всего списка 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>)

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс первого вхождения в диапазоне элементов списка 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 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>)

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс первого вхождения в диапазоне элементов списка 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 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>)

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс первого найденного вхождения в пределах всего списка 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

Параметры

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

Делегат Predicate<T>, определяющий условия поиска элемента.The Predicate<T> delegate that defines the conditions of the element to search for.

Возвраты

Отсчитываемый от нуля индекс первого вхождения элемента, отвечающего условиям предиката match, если такой элемент найден. В противном случае значение –1.The zero-based index of the first occurrence of an element that matches the conditions defined by match, if found; otherwise, -1.

Исключения

Примеры

В следующем примере определяется Employee класс с двумя полями Name и Id.The following example defines an Employee class with two fields, Name and Id. Он также определяет EmployeeSearch класс с единственным методом, StartsWith, указывает ли Employee.Name поля начинается с указанной подстроки, который предоставляется EmployeeSearch конструктора класса.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. Обратите внимание, подпись этого методаNote the signature of this method

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

соответствует сигнатуре делегата, который может быть передан в FindIndex метод.corresponds to the signature of the delegate that can be passed to the FindIndex method. В примере создается экземпляр List<Employee> , добавляет ряд Employee объектов к нему, а затем вызывает FindIndex(Int32, Int32, Predicate<T>) метод дважды, чтобы поиск по всей коллекции, в первый раз для первого Employee которого Name поля начинается с помощью «J», а во второй раз для первого Employee которого Name поля начинается с «МА».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

Комментарии

List<T> Выполняется поиск вперед, начиная с первого элемента и заканчивая последним элементом.The List<T> is searched forward starting at the first element and ending at the last element.

Predicate<T> Делегат для метода, который возвращает true если переданный объект соответствует условиям, определенным в делегате.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. Элементы текущей List<T> передаются по отдельности Predicate<T> делегировать.The elements of the current List<T> are individually passed to the Predicate<T> delegate. Делегат имеет сигнатуру:The delegate has the signature:

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

Этот метод выполняет линейный поиск; Таким образом, этот метод является операцией O (n) операции, где n является Count.This method performs a linear search; therefore, this method is an O(n) operation, where n is Count.

Дополнительно

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

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс первого вхождения в диапазоне элементов списка 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 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

Параметры

startIndex
Int32 Int32 Int32 Int32

Индекс (с нуля) начальной позиции поиска.The zero-based starting index of the search.

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

Делегат Predicate<T>, определяющий условия поиска элемента.The Predicate<T> delegate that defines the conditions of the element to search for.

Возвраты

Отсчитываемый от нуля индекс первого вхождения элемента, отвечающего условиям предиката match, если такой элемент найден. В противном случае значение –1.The zero-based index of the first occurrence of an element that matches the conditions defined by match, if found; otherwise, -1.

Исключения

startIndex находится вне диапазона допустимых индексов для List<T>.startIndex is outside the range of valid indexes for the List<T>.

Примеры

В следующем примере определяется Employee класс с двумя полями Name и Id.The following example defines an Employee class with two fields, Name and Id. Он также определяет EmployeeSearch класс с единственным методом, StartsWith, указывает ли Employee.Name поля начинается с указанной подстроки, который предоставляется EmployeeSearch конструктора класса.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. Обратите внимание, подпись этого методаNote the signature of this method

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

соответствует сигнатуре делегата, который может быть передан в FindIndex метод.corresponds to the signature of the delegate that can be passed to the FindIndex method. В примере создается экземпляр List<Employee> , добавляет ряд Employee объектов к нему, а затем вызывает FindIndex(Int32, Int32, Predicate<T>) метод дважды, для поиска в коллекции, начиная с его пятого элемента (то есть элемент по индексу 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). Первый раз, он выполняет поиск первого Employee которого Name поля начинается с «J»; второй раз, он выполняет поиск первого Employee которого Name поля начинается с «МА».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

Комментарии

List<T> Выполняется от в startIndex и заканчивая последним элементом.The List<T> is searched forward starting at startIndex and ending at the last element.

Predicate<T> Делегат для метода, который возвращает true если переданный объект соответствует условиям, определенным в делегате.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. Элементы текущей List<T> передаются по отдельности Predicate<T> делегировать.The elements of the current List<T> are individually passed to the Predicate<T> delegate. Делегат имеет сигнатуру:The delegate has the signature:

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

Этот метод выполняет линейный поиск; Таким образом, этот метод является операцией O (n) операции, где n — количество элементов из startIndex в конец 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>.

Дополнительно

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

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс первого вхождения в диапазоне элементов списка 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 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

Параметры

startIndex
Int32 Int32 Int32 Int32

Индекс (с нуля) начальной позиции поиска.The zero-based starting index of the search.

count
Int32 Int32 Int32 Int32

Число элементов в диапазоне, в котором выполняется поиск.The number of elements in the section to search.

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

Делегат Predicate<T>, определяющий условия поиска элемента.The Predicate<T> delegate that defines the conditions of the element to search for.

Возвраты

Отсчитываемый от нуля индекс первого вхождения элемента, отвечающего условиям предиката match, если такой элемент найден. В противном случае значение –1.The zero-based index of the first occurrence of an element that matches the conditions defined by match, if found; otherwise, -1.

Исключения

startIndex находится вне диапазона допустимых индексов для List<T>.startIndex is outside the range of valid indexes for the List<T>.

-или--or- Значение параметра count меньше 0.count is less than 0.

-или--or- startIndex и count не указывают допустимый раздел в List<T>.startIndex and count do not specify a valid section in the List<T>.

Примеры

В следующем примере определяется Employee класс с двумя полями Name и Id.The following example defines an Employee class with two fields, Name and Id. Он также определяет EmployeeSearch класс с единственным методом, StartsWith, указывает ли Employee.Name поля начинается с указанной подстроки, который предоставляется EmployeeSearch конструктора класса.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. Обратите внимание, подпись этого методаNote the signature of this method

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

соответствует сигнатуре делегата, который может быть передан в FindIndex метод.corresponds to the signature of the delegate that can be passed to the FindIndex method. В примере создается экземпляр List<Employee> , добавляет ряд Employee объектов к нему, а затем вызывает FindIndex(Int32, Int32, Predicate<T>) метод дважды, чтобы поиск по всей коллекции (то есть элементов от индекса 0 индекс Count - 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). Первый раз, он выполняет поиск первого Employee которого Name поля начинается с «J»; второй раз, он выполняет поиск первого Employee которого Name поля начинается с «МА».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

Комментарии

List<T> Выполняется от в startIndex и заканчивая startIndex , а также count минус 1, если count больше 0.The List<T> is searched forward starting at startIndex and ending at startIndex plus count minus 1, if count is greater than 0.

Predicate<T> Делегат для метода, который возвращает true если переданный объект соответствует условиям, определенным в делегате.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. Элементы текущей List<T> передаются по отдельности Predicate<T> делегировать.The elements of the current List<T> are individually passed to the Predicate<T> delegate. Делегат имеет сигнатуру:The delegate has the signature:

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

Этот метод выполняет линейный поиск; Таким образом, этот метод является операцией O (n) операции, где n является count.This method performs a linear search; therefore, this method is an O(n) operation, where n is count.

Дополнительно

Применяется к