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

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

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

count
Int32

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

match
Predicate<T>

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

戻り値

Int32

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

例外

matchnullです。

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

  • または - count が 0 未満です。

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

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

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

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

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

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

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

こちらもご覧ください

適用対象

FindIndex(Predicate<T>)

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

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> デリゲート。

戻り値

Int32

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

例外

matchnullです。

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

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

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

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

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

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

こちらもご覧ください

適用対象

FindIndex(Int32, Predicate<T>)

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

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

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

match
Predicate<T>

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

戻り値

Int32

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

例外

matchnullです。

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

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

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

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

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

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

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

こちらもご覧ください

適用対象