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

定義

List<T> またはその一部分から、指定した述語によって定義される条件に一致する要素を検索し、最もインデックス番号の小さい要素の 0 から始まるインデックスを返します。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> 全体から、指定した述語によって定義される条件に一致する要素を検索し、最もインデックス番号の小さい要素の 0 から始まるインデックスを返します。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> の指定したインデックスから最後の要素までの範囲内で、指定した述語にで定義される条件に一致する要素を検索し、最初に見つかった 0 から始まるインデックスを返します。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> のうち、指定したインデックスから始まり、指定した要素数が含まれる範囲の中で、指定した述語によって定義される条件に一致する要素を検索し、そのうち最もインデックス番号の小さい要素の 0 から始まるインデックスを返します。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> 全体から、指定した述語によって定義される条件に一致する要素を検索し、最もインデックス番号の小さい要素の 0 から始まるインデックスを返します。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 で定義された条件と一致する要素が存在した場合、最もインデックス番号の小さい要素の 0 から始まるインデックス。それ以外の場合は -1。The zero-based index of the first occurrence of an element that matches the conditions defined by match, if found; otherwise, -1.

例外

次の例ではEmployeeNameととIdいう2つのフィールドを持つクラスを定義します。The following example defines an Employee class with two fields, Name and Id. また、1つEmployeeSearchStartsWithメソッドを持つクラスを定義します。この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>)してから、メソッドを2回呼び出して、 Nameフィールドが始まるEmployee最初のオブジェクトに対して最初にコレクション全体を検索します。"J" で、2回目はEmployee Nameフィールドが "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

注釈

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) 演算です。 ** ここでCount、n はです。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> の指定したインデックスから最後の要素までの範囲内で、指定した述語にで定義される条件に一致する要素を検索し、最初に見つかった 0 から始まるインデックスを返します。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

検索の開始位置を示す 0 から始まるインデックス。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 で定義された条件と一致する要素が存在した場合、最もインデックス番号の小さい要素の 0 から始まるインデックス。それ以外の場合は -1。The zero-based index of the first occurrence of an element that matches the conditions defined by match, if found; otherwise, -1.

例外

startIndexList<T> の有効なインデックスの範囲外です。startIndex is outside the range of valid indexes for the List<T>.

次の例ではEmployeeNameととIdいう2つのフィールドを持つクラスを定義します。The following example defines an Employee class with two fields, Name and Id. また、1つEmployeeSearchStartsWithメソッドを持つクラスを定義します。この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>)してから、メソッドを2回呼び出して、5番目のメンバー (つまり、インデックス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). 最初に、 Nameフィールドが "J" でEmployee始まる最初のオブジェクトを検索します。2回目は、 Nameフィールドが "Ju Employee " で始まる最初のオブジェクトを検索します。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) 演算ですList<T>。ここで、 nはの要素startIndexの数をの末尾からです。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> のうち、指定したインデックスから始まり、指定した要素数が含まれる範囲の中で、指定した述語によって定義される条件に一致する要素を検索し、そのうち最もインデックス番号の小さい要素の 0 から始まるインデックスを返します。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

検索の開始位置を示す 0 から始まるインデックス。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 で定義された条件と一致する要素が存在した場合、最もインデックス番号の小さい要素の 0 から始まるインデックス。それ以外の場合は -1。The zero-based index of the first occurrence of an element that matches the conditions defined by match, if found; otherwise, -1.

例外

startIndexList<T> の有効なインデックスの範囲外です。startIndex is outside the range of valid indexes for the List<T>.

- または --or- count が 0 未満です。count is less than 0.

- または --or- startIndex および countList<T> 内の正しいセクションを指定していません。startIndex and count do not specify a valid section in the List<T>.

次の例ではEmployeeNameととIdいう2つのフィールドを持つクラスを定義します。The following example defines an Employee class with two fields, Name and Id. また、1つEmployeeSearchStartsWithメソッドを持つクラスを定義します。この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>)してから、メソッドを2回呼び出して、コレクション全体 (つまり、インデックス 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). 最初に、 Nameフィールドが "J" でEmployee始まる最初のオブジェクトを検索します。2回目は、 Nameフィールドが "Ju Employee " で始まる最初のオブジェクトを検索します。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

注釈

count count startIndexはを先頭にstartIndex向かって検索され、が0より大きい場合は+-1で終わります。List<T>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) 演算です。 ** ここでcount、n はです。This method performs a linear search; therefore, this method is an O(n) operation, where n is count.

こちらもご覧ください

適用対象