List<T>.FindIndex メソッド

定義

List<T> またはその一部分から、指定した述語によって定義される条件に一致する要素を検索し、最もインデックス番号の小さい要素の 0 から始まるインデックスを返します。 このメソッドは、条件に一致する項目が見つからなかった場合に -1 を返します。

オーバーロード

FindIndex(Int32, Int32, Predicate<T>)

List<T> のうち、指定したインデックスから始まり、指定した要素数が含まれる範囲の中で、指定した述語によって定義される条件に一致する要素を検索し、そのうち最もインデックス番号の小さい要素の 0 から始まるインデックスを返します。

FindIndex(Predicate<T>)

List<T> 全体から、指定した述語によって定義される条件に一致する要素を検索し、最もインデックス番号の小さい要素の 0 から始まるインデックスを返します。

FindIndex(Int32, Predicate<T>)

List<T> の指定したインデックスから最後の要素までの範囲内で、指定した述語にで定義される条件に一致する要素を検索し、最初に見つかった 0 から始まるインデックスを返します。

FindIndex(Int32, Int32, Predicate<T>)

ソース:
List.cs
ソース:
List.cs
ソース:
List.cs

List<T> のうち、指定したインデックスから始まり、指定した要素数が含まれる範囲の中で、指定した述語によって定義される条件に一致する要素を検索し、そのうち最もインデックス番号の小さい要素の 0 から始まるインデックスを返します。

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

パラメーター

startIndex
Int32

検索の開始位置を示す 0 から始まるインデックス。

count
Int32

検索対象の範囲内にある要素の数。

match
Predicate<T>

検索する要素の条件を定義する Predicate<T> デリゲート。

戻り値

match で定義された条件と一致する要素が存在した場合、最もインデックス番号の小さい要素の 0 から始まるインデックス。それ以外の場合は -1。

例外

matchnullです。

startIndexList<T>の有効なインデックスの範囲外です。

- または -

count が 0 未満です。

- または -

startIndex および countList<T> 内の正しいセクションを指定していません。

次の例では、 と の 2 つのフィールドNameEmployee持つクラスをId定義します。 また、StartsWithフィールドがクラス コンストラクターにEmployeeSearch指定された指定した部分文字列で始まるかどうかをEmployee.Name示す 1 つのメソッド を使用してクラスをEmployeeSearch定義します。 このメソッドのシグネチャに注意してください

C#
public bool StartsWith(Employee e)

は、 メソッドに渡すことができるデリゲートのシグネチャに FindIndex 対応します。 この例では、オブジェクトを List<Employee> インスタンス化し、オブジェクトの Employee 数を追加してから、 メソッドを FindIndex(Int32, Int32, Predicate<T>) 2 回呼び出してコレクション全体 (インデックス 0 からインデックス Count - 1 のメンバー) を検索します。 最初に、フィールドが "J" で始まる最初 Employee のオブジェクト Name を検索します。2 回目は、フィールドが "Ju" で始まる最初 Employee のオブジェクト Name を検索します。

C#
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>が 0 より大きい場合countは、 からstartIndex順に検索され、プラス count -1 でstartIndex終わる。

Predicate<T>は、渡されたオブジェクトがデリゲートで定義されている条件と一致する場合に を返すtrueメソッドへのデリゲートです。 現在 List<T> の の要素は、デリゲートに個別に Predicate<T> 渡されます。 デリゲートには署名があります。

C#
public bool methodName(T obj)

このメソッドは線形検索を実行します。したがって、このメソッドは O(n) 操作であり、 ncountです。

こちらもご覧ください

適用対象

.NET 9 およびその他のバージョン
製品 バージョン
.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

FindIndex(Predicate<T>)

ソース:
List.cs
ソース:
List.cs
ソース:
List.cs

List<T> 全体から、指定した述語によって定義される条件に一致する要素を検索し、最もインデックス番号の小さい要素の 0 から始まるインデックスを返します。

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

パラメーター

match
Predicate<T>

検索する要素の条件を定義する Predicate<T> デリゲート。

戻り値

match で定義された条件と一致する要素が存在した場合、最もインデックス番号の小さい要素の 0 から始まるインデックス。それ以外の場合は -1。

例外

matchnullです。

次の例では、 と の 2 つのフィールドNameEmployee持つクラスをId定義します。 また、StartsWithフィールドがクラス コンストラクターにEmployeeSearch指定された指定した部分文字列で始まるかどうかをEmployee.Name示す 1 つのメソッド を使用してクラスをEmployeeSearch定義します。 このメソッドのシグネチャに注意してください

C#
public bool StartsWith(Employee e)

は、 メソッドに渡すことができるデリゲートのシグネチャに FindIndex 対応します。 この例では、オブジェクトをList<Employee>インスタンス化し、オブジェクトのEmployee数を追加してから、 メソッドを 2 回呼び出してコレクション全体を検索し、フィールドが "J" で始まる最初EmployeeのオブジェクトNameを初めて検索し、フィールドが "Ju" で始まる最初EmployeeのオブジェクトNameの 2 回目を呼び出FindIndex(Int32, Int32, Predicate<T>)します。

C#
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> 渡されます。 デリゲートには署名があります。

C#
public bool methodName(T obj)

このメソッドは線形検索を実行します。したがって、このメソッドは O(n) 操作であり、 nCountです。

こちらもご覧ください

適用対象

.NET 9 およびその他のバージョン
製品 バージョン
.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

FindIndex(Int32, Predicate<T>)

ソース:
List.cs
ソース:
List.cs
ソース:
List.cs

List<T> の指定したインデックスから最後の要素までの範囲内で、指定した述語にで定義される条件に一致する要素を検索し、最初に見つかった 0 から始まるインデックスを返します。

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

パラメーター

startIndex
Int32

検索の開始位置を示す 0 から始まるインデックス。

match
Predicate<T>

検索する要素の条件を定義する Predicate<T> デリゲート。

戻り値

match で定義された条件と一致する要素が存在した場合、最もインデックス番号の小さい要素の 0 から始まるインデックス。それ以外の場合は -1。

例外

matchnullです。

startIndexList<T>の有効なインデックスの範囲外です。

次の例では、 と の 2 つのフィールドNameEmployee持つクラスをId定義します。 また、StartsWithフィールドがクラス コンストラクターにEmployeeSearch指定された指定した部分文字列で始まるかどうかをEmployee.Name示す 1 つのメソッド を使用してクラスをEmployeeSearch定義します。 このメソッドのシグネチャに注意してください

C#
public bool StartsWith(Employee e)

は、 メソッドに渡すことができるデリゲートのシグネチャに FindIndex 対応します。 この例では、オブジェクトを List<Employee> インスタンス化し、オブジェクトの Employee 数を追加してから、 メソッドを 2 回呼び出 FindIndex(Int32, Int32, Predicate<T>) して、5 番目のメンバー (インデックス 4 のメンバー) で始まるコレクションを検索します。 最初に、フィールドが "J" で始まる最初 Employee のオブジェクト Name を検索します。2 回目は、フィールドが "Ju" で始まる最初 Employee のオブジェクト Name を検索します。

C#
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> 渡されます。 デリゲートには署名があります。

C#
public bool methodName(T obj)

このメソッドは線形検索を実行します。したがって、このメソッドは O(n) 演算です。 ここで、n は から startIndex の最後までの要素の数です List<T>

こちらもご覧ください

適用対象

.NET 9 およびその他のバージョン
製品 バージョン
.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