この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

List<T>.FindIndex メソッド (Int32, Int32, Predicate<T>)

 

公開日: 2016年10月

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

名前空間:   System.Collections.Generic
アセンブリ:  mscorlib (mscorlib.dll 内)

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

パラメーター

startIndex
Type: System.Int32

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

count
Type: System.Int32

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

match
Type: System.Predicate<T>

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

戻り値

Type: System.Int32

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

Exception Condition
ArgumentNullException

matchnull です。

ArgumentOutOfRangeException

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

または

count が 0 未満です。

または

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

List<T> 転送を開始位置として検索 startIndex で終わる startIndex plus count 1 を引いた値場合 count が 0 より大きい。

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

public bool methodName(T obj)

このメソッドは、一方向の検索を実行します。そのため、このメソッドは、O (n) 操作の場合、 ncountです。

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

public bool StartsWith(Employee e)

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

ユニバーサル Windows プラットフォーム
8 以降で使用可能
.NET Framework
2.0 以降で使用可能
ポータブル クラス ライブラリ
サポート対象: 移植可能 .NET プラットフォーム
Windows Phone Silverlight
8.0 以降で使用可能
Windows Phone
8.1 以降で使用可能
トップに戻る
表示: