Прочитать на английском

Поделиться через


List<T>.FindIndex Метод

Определение

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс первого найденного вхождения в пределах всего списка List<T> или его части. Этот метод возвращает значение -1, если соответствующий условию элемент не найден.

Перегрузки

FindIndex(Int32, Int32, Predicate<T>)

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс первого вхождения в диапазоне элементов списка List<T>, начинающемся с заданного индекса и содержащем указанное число элементов.

FindIndex(Predicate<T>)

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс первого найденного вхождения в пределах всего списка List<T>.

FindIndex(Int32, Predicate<T>)

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс первого вхождения в диапазоне элементов списка List<T>, начиная с заданного индекса и заканчивая последним элементом.

FindIndex(Int32, Int32, Predicate<T>)

Исходный код:
List.cs
Исходный код:
List.cs
Исходный код:
List.cs

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс первого вхождения в диапазоне элементов списка List<T>, начинающемся с заданного индекса и содержащем указанное число элементов.

public int FindIndex (int startIndex, int count, Predicate<T> match);

Параметры

startIndex
Int32

Индекс (с нуля) начальной позиции поиска.

count
Int32

Число элементов в диапазоне, в котором выполняется поиск.

match
Predicate<T>

Делегат Predicate<T>, определяющий условия поиска элемента.

Возвращаемое значение

Отсчитываемый от нуля индекс первого вхождения элемента, отвечающего условиям предиката match, если такой элемент найден. В противном случае значение –1.

Исключения

match имеет значение null.

startIndex находится вне диапазона допустимых индексов для List<T>.

-или-

Значение параметраcount меньше 0.

-или-

startIndex и count не указывают допустимый раздел в List<T>.

Примеры

В следующем примере определяется Employee класс с двумя полями: Name и Id. Он также определяет EmployeeSearch класс с одним методом , который указывает, StartsWithначинается ли Employee.Name поле с указанной подстроки, предоставленной конструктору EmployeeSearch класса. Обратите внимание на сигнатуру этого метода.

public bool StartsWith(Employee e)

соответствует сигнатуре делегата, который может быть передан методу FindIndex . В примере создается List<Employee> экземпляр объекта , добавляется к нему несколько Employee объектов, а затем метод дважды вызывается FindIndex(Int32, Int32, Predicate<T>) для поиска всей коллекции (то есть элементов от индекса 0 до индекса Count — 1). В первый раз выполняется поиск первого Employee объекта, поле которого Name начинается с "J"; во второй раз выполняется поиск первого Employee объекта, поле которого Name начинается с "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

Комментарии

Выполняется List<T> поиск вперед, начиная с startIndex и заканчивая startIndex плюс count минус 1, если count больше 0.

Predicate<T> это делегат метода, который возвращает true значение , если переданный ему объект соответствует условиям, определенным в делегате. Элементы текущего List<T> объекта передаются делегату по отдельности Predicate<T> . Делегат имеет сигнатуру:

public bool methodName(T obj)

Этот метод выполняет линейный поиск; таким образом, этот метод является операцией O(n), где n — .count

См. также раздел

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

FindIndex(Predicate<T>)

Исходный код:
List.cs
Исходный код:
List.cs
Исходный код:
List.cs

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс первого найденного вхождения в пределах всего списка List<T>.

public int FindIndex (Predicate<T> match);

Параметры

match
Predicate<T>

Делегат Predicate<T>, определяющий условия поиска элемента.

Возвращаемое значение

Отсчитываемый от нуля индекс первого вхождения элемента, отвечающего условиям предиката match, если такой элемент найден. В противном случае значение –1.

Исключения

match имеет значение null.

Примеры

В следующем примере определяется Employee класс с двумя полями: Name и Id. Он также определяет EmployeeSearch класс с одним методом , который указывает, StartsWithначинается ли Employee.Name поле с указанной подстроки, предоставленной конструктору EmployeeSearch класса. Обратите внимание на сигнатуру этого метода.

public bool StartsWith(Employee e)

соответствует сигнатуре делегата, который может быть передан методу FindIndex . В примере создается List<Employee> экземпляр объекта , добавляется в него несколько Employee объектов, а затем метод дважды вызывается FindIndex(Int32, Int32, Predicate<T>) для поиска всей коллекции: первый раз для первого Employee объекта, поле которого Name начинается с "J", и второй раз для первого Employee объекта, поле которого Name начинается с 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

Комментарии

Выполняется List<T> поиск вперед, начиная с первого элемента и заканчивая последним элементом.

Predicate<T> это делегат метода, который возвращает true значение , если переданный ему объект соответствует условиям, определенным в делегате. Элементы текущего List<T> объекта передаются делегату по отдельности Predicate<T> . Делегат имеет сигнатуру:

public bool methodName(T obj)

Этот метод выполняет линейный поиск; таким образом, этот метод является операцией O(n), где n — .Count

См. также раздел

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

FindIndex(Int32, Predicate<T>)

Исходный код:
List.cs
Исходный код:
List.cs
Исходный код:
List.cs

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс первого вхождения в диапазоне элементов списка List<T>, начиная с заданного индекса и заканчивая последним элементом.

public int FindIndex (int startIndex, Predicate<T> match);

Параметры

startIndex
Int32

Индекс (с нуля) начальной позиции поиска.

match
Predicate<T>

Делегат Predicate<T>, определяющий условия поиска элемента.

Возвращаемое значение

Отсчитываемый от нуля индекс первого вхождения элемента, отвечающего условиям предиката match, если такой элемент найден. В противном случае значение –1.

Исключения

match имеет значение null.

startIndex находится вне диапазона допустимых индексов для List<T>.

Примеры

В следующем примере определяется Employee класс с двумя полями: Name и Id. Он также определяет EmployeeSearch класс с одним методом , который указывает, StartsWithначинается ли Employee.Name поле с указанной подстроки, предоставленной конструктору EmployeeSearch класса. Обратите внимание на сигнатуру этого метода.

public bool StartsWith(Employee e)

соответствует сигнатуре делегата, который может быть передан методу FindIndex . В этом примере создается List<Employee> экземпляр объекта , добавляется в него несколько Employee объектов, а затем вызывается FindIndex(Int32, Int32, Predicate<T>) метод дважды для поиска коллекции, начиная с ее пятого элемента (то есть элемента с индексом 4). В первый раз выполняется поиск первого Employee объекта, поле которого Name начинается с "J"; во второй раз выполняется поиск первого Employee объекта, поле которого Name начинается с "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

Комментарии

Выполняется List<T> поиск вперед, начиная с startIndex и заканчивая последним элементом.

Predicate<T> это делегат метода, который возвращает true значение , если переданный ему объект соответствует условиям, определенным в делегате. Элементы текущего List<T> объекта передаются делегату по отдельности Predicate<T> . Делегат имеет сигнатуру:

public bool methodName(T obj)

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

См. также раздел

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