List<T>.FindIndex メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
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 から始まるインデックスを返します。
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> デリゲート。
戻り値
match
で定義された条件と一致する要素が存在した場合、最もインデックス番号の小さい要素の 0 から始まるインデックス。それ以外の場合は -1。
例外
match
が null
です。
startIndex
は List<T>の有効なインデックスの範囲外です。
- または -
count
が 0 未満です。
- または -
startIndex
および count
が List<T> 内の正しいセクションを指定していません。
例
次の例では、 と の 2 つのフィールドName
をEmployee
持つクラスをId
定義します。 また、StartsWith
フィールドがクラス コンストラクターにEmployeeSearch
指定された指定した部分文字列で始まるかどうかをEmployee.Name
示す 1 つのメソッド を使用してクラスをEmployeeSearch
定義します。 このメソッドのシグネチャに注意してください
public bool StartsWith(Employee e)
Public Function StartsWith(e As Employee) As Boolean
は、 メソッドに渡すことができるデリゲートのシグネチャに FindIndex 対応します。 この例では、オブジェクトを List<Employee>
インスタンス化し、オブジェクトの Employee
数を追加してから、 メソッドを FindIndex(Int32, Int32, Predicate<T>) 2 回呼び出してコレクション全体 (インデックス 0 からインデックス Count - 1 のメンバー) を検索します。 最初に、フィールドが "J" で始まる最初 Employee
のオブジェクト Name
を検索します。2 回目は、フィールドが "Ju" で始まる最初 Employee
のオブジェクト Name
を検索します。
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>が 0 より大きい場合count
は、 からstartIndex
順に検索され、プラス count
-1 でstartIndex
終わる。
Predicate<T>は、渡されたオブジェクトがデリゲートで定義されている条件と一致する場合に を返すtrue
メソッドへのデリゲートです。 現在 List<T> の の要素は、デリゲートに個別に Predicate<T> 渡されます。 デリゲートには署名があります。
public bool methodName(T obj)
Public Function methodName(obj As T) As Boolean
このメソッドは線形検索を実行します。したがって、このメソッドは O(n) 操作であり、 n は count
です。
こちらもご覧ください
- Exists(Predicate<T>)
- Find(Predicate<T>)
- FindLast(Predicate<T>)
- FindAll(Predicate<T>)
- FindLastIndex
- BinarySearch
- IndexOf
- LastIndexOf
- Predicate<T>
適用対象
FindIndex(Predicate<T>)
- ソース:
- List.cs
- ソース:
- List.cs
- ソース:
- List.cs
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> デリゲート。
戻り値
match
で定義された条件と一致する要素が存在した場合、最もインデックス番号の小さい要素の 0 から始まるインデックス。それ以外の場合は -1。
例外
match
が null
です。
例
次の例では、 と の 2 つのフィールドName
をEmployee
持つクラスをId
定義します。 また、StartsWith
フィールドがクラス コンストラクターにEmployeeSearch
指定された指定した部分文字列で始まるかどうかをEmployee.Name
示す 1 つのメソッド を使用してクラスをEmployeeSearch
定義します。 このメソッドのシグネチャに注意してください
public bool StartsWith(Employee e)
Public Function StartsWith(e As Employee) As Boolean
は、 メソッドに渡すことができるデリゲートのシグネチャに FindIndex 対応します。 この例では、オブジェクトをList<Employee>
インスタンス化し、オブジェクトのEmployee
数を追加してから、 メソッドを 2 回呼び出してコレクション全体を検索し、フィールドが "J" で始まる最初Employee
のオブジェクトName
を初めて検索し、フィールドが "Ju" で始まる最初Employee
のオブジェクトName
の 2 回目を呼び出FindIndex(Int32, Int32, Predicate<T>)します。
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) 操作であり、 n は Countです。
こちらもご覧ください
- Exists(Predicate<T>)
- Find(Predicate<T>)
- FindLast(Predicate<T>)
- FindAll(Predicate<T>)
- FindLastIndex
- BinarySearch
- IndexOf
- LastIndexOf
- Predicate<T>
適用対象
FindIndex(Int32, Predicate<T>)
- ソース:
- List.cs
- ソース:
- List.cs
- ソース:
- List.cs
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> デリゲート。
戻り値
match
で定義された条件と一致する要素が存在した場合、最もインデックス番号の小さい要素の 0 から始まるインデックス。それ以外の場合は -1。
例外
match
が null
です。
startIndex
は List<T>の有効なインデックスの範囲外です。
例
次の例では、 と の 2 つのフィールドName
をEmployee
持つクラスをId
定義します。 また、StartsWith
フィールドがクラス コンストラクターにEmployeeSearch
指定された指定した部分文字列で始まるかどうかをEmployee.Name
示す 1 つのメソッド を使用してクラスを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 のメンバー) で始まるコレクションを検索します。 最初に、フィールドが "J" で始まる最初 Employee
のオブジェクト Name
を検索します。2 回目は、フィールドが "Ju" で始まる最初 Employee
のオブジェクト Name
を検索します。
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>。
こちらもご覧ください
- Exists(Predicate<T>)
- Find(Predicate<T>)
- FindLast(Predicate<T>)
- FindAll(Predicate<T>)
- FindLastIndex
- BinarySearch
- IndexOf
- LastIndexOf
- Predicate<T>
適用対象
.NET