List<T>.FindIndex Metodo

Definizione

Cerca un elemento che corrisponda alle condizioni definite da un predicato specificato e restituisce l'indice in base zero della prima occorrenza all'interno di List<T> o di una parte di esso.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. Questo metodo restituisce -1 se non viene trovato alcun articolo che soddisfa le condizioni.This method returns -1 if an item that matches the conditions is not found.

Overload

FindIndex(Predicate<T>)

Cerca un elemento che corrisponda alle condizioni definite dal predicato specificato e restituisce l'indice in base zero della prima occorrenza all'interno di List<T>.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>)

Cerca un elemento che soddisfi le condizioni definite dal predicato specificato e restituisce l'indice in base zero della prima occorrenza all'interno dell'intervallo di elementi nell'oggetto List<T> compreso tra l'indice specificato e l'ultimo elemento.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>)

Cerca un elemento che soddisfi le condizioni definite dal predicato specificato e restituisce l'indice in base zero della prima occorrenza all'interno dell'intervallo di elementi nell'oggetto List<T> che inizia dall'indice specificato e contiene il numero indicato di elementi.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>)

Cerca un elemento che corrisponda alle condizioni definite dal predicato specificato e restituisce l'indice in base zero della prima occorrenza all'interno di List<T>.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

Parametri

match
Predicate<T>

Delegato Predicate<T> che definisce le condizioni dell'elemento da cercare.The Predicate<T> delegate that defines the conditions of the element to search for.

Restituisce

Indice in base zero della prima occorrenza di un elemento che corrisponde alle condizioni definite da match, se presente; in caso contrario, -1.The zero-based index of the first occurrence of an element that matches the conditions defined by match, if found; otherwise, -1.

Eccezioni

match è null.match is null.

Esempi

Nell'esempio seguente viene definita una classe Employee con due campi, Name e Id.The following example defines an Employee class with two fields, Name and Id. Definisce inoltre una classe EmployeeSearch con un solo metodo, StartsWith, che indica se il campo Employee.Name inizia con una sottostringa specificata fornita al costruttore della classe 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. Annotare la firma di questo metodoNote the signature of this method

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

corrisponde alla firma del delegato che può essere passata al metodo FindIndex.corresponds to the signature of the delegate that can be passed to the FindIndex method. Nell'esempio viene creata un'istanza di un oggetto List<Employee>, viene aggiunto un numero di oggetti Employee, quindi viene chiamato il metodo FindIndex(Int32, Int32, Predicate<T>) due volte per eseguire la ricerca nell'intera raccolta, la prima volta per il primo oggetto Employee il cui campo Name inizia con "J" e la seconda volta per il primo oggetto Employee il cui campo Name inizia con "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

Commenti

Il List<T> viene cercato in futuro a partire dal primo elemento e termina in corrispondenza dell'ultimo elemento.The List<T> is searched forward starting at the first element and ending at the last element.

Il Predicate<T> è un delegato a un metodo che restituisce true se l'oggetto passato a esso corrisponde alle condizioni definite nel delegato.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. Gli elementi del List<T> corrente vengono passati singolarmente al delegato di Predicate<T>.The elements of the current List<T> are individually passed to the Predicate<T> delegate. Il delegato ha la firma:The delegate has the signature:

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

Questo metodo esegue una ricerca lineare; Pertanto, questo metodo è un'operazione O (n), dove n è Count.This method performs a linear search; therefore, this method is an O(n) operation, where n is Count.

Vedi anche

FindIndex(Int32, Predicate<T>)

Cerca un elemento che soddisfi le condizioni definite dal predicato specificato e restituisce l'indice in base zero della prima occorrenza all'interno dell'intervallo di elementi nell'oggetto List<T> compreso tra l'indice specificato e l'ultimo elemento.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

Parametri

startIndex
Int32

Indice iniziale in base zero della ricerca.The zero-based starting index of the search.

match
Predicate<T>

Delegato Predicate<T> che definisce le condizioni dell'elemento da cercare.The Predicate<T> delegate that defines the conditions of the element to search for.

Restituisce

Indice in base zero della prima occorrenza di un elemento che corrisponde alle condizioni definite da match, se presente; in caso contrario, -1.The zero-based index of the first occurrence of an element that matches the conditions defined by match, if found; otherwise, -1.

Eccezioni

match è null.match is null.

startIndex non è compreso nell'intervallo di indici validi per List<T>.startIndex is outside the range of valid indexes for the List<T>.

Esempi

Nell'esempio seguente viene definita una classe Employee con due campi, Name e Id.The following example defines an Employee class with two fields, Name and Id. Definisce inoltre una classe EmployeeSearch con un solo metodo, StartsWith, che indica se il campo Employee.Name inizia con una sottostringa specificata fornita al costruttore della classe 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. Annotare la firma di questo metodoNote the signature of this method

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

corrisponde alla firma del delegato che può essere passata al metodo FindIndex.corresponds to the signature of the delegate that can be passed to the FindIndex method. Nell'esempio viene creata un'istanza di un oggetto List<Employee>, viene aggiunto un numero di oggetti Employee, quindi viene chiamato due volte il metodo FindIndex(Int32, Int32, Predicate<T>) per eseguire una ricerca nella raccolta a partire dal quinto membro, ovvero il membro in corrispondenza dell'indice 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). La prima volta, Cerca il primo oggetto Employee il cui campo Name inizia con "J"; la seconda volta, Cerca il primo oggetto Employee il cui campo Name inizia con "Ju".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

Commenti

Il List<T> viene cercato in futuro a partire da startIndex e termina in corrispondenza dell'ultimo elemento.The List<T> is searched forward starting at startIndex and ending at the last element.

Il Predicate<T> è un delegato a un metodo che restituisce true se l'oggetto passato a esso corrisponde alle condizioni definite nel delegato.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. Gli elementi del List<T> corrente vengono passati singolarmente al delegato di Predicate<T>.The elements of the current List<T> are individually passed to the Predicate<T> delegate. Il delegato ha la firma:The delegate has the signature:

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

Questo metodo esegue una ricerca lineare; Pertanto, questo metodo è un'operazione O (n), dove n è il numero di elementi da startIndex alla fine del List<T>.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>.

Vedi anche

FindIndex(Int32, Int32, Predicate<T>)

Cerca un elemento che soddisfi le condizioni definite dal predicato specificato e restituisce l'indice in base zero della prima occorrenza all'interno dell'intervallo di elementi nell'oggetto List<T> che inizia dall'indice specificato e contiene il numero indicato di elementi.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

Parametri

startIndex
Int32

Indice iniziale in base zero della ricerca.The zero-based starting index of the search.

count
Int32

Numero di elementi nella sezione in cui eseguire la ricerca.The number of elements in the section to search.

match
Predicate<T>

Delegato Predicate<T> che definisce le condizioni dell'elemento da cercare.The Predicate<T> delegate that defines the conditions of the element to search for.

Restituisce

Indice in base zero della prima occorrenza di un elemento che corrisponde alle condizioni definite da match, se presente; in caso contrario, -1.The zero-based index of the first occurrence of an element that matches the conditions defined by match, if found; otherwise, -1.

Eccezioni

match è null.match is null.

startIndex non è compreso nell'intervallo di indici validi per List<T>.startIndex is outside the range of valid indexes for the List<T>.

-oppure--or- count è minore di 0.count is less than 0.

-oppure--or- startIndex e count non specificano una sezione valida in List<T>.startIndex and count do not specify a valid section in the List<T>.

Esempi

Nell'esempio seguente viene definita una classe Employee con due campi, Name e Id.The following example defines an Employee class with two fields, Name and Id. Definisce inoltre una classe EmployeeSearch con un solo metodo, StartsWith, che indica se il campo Employee.Name inizia con una sottostringa specificata fornita al costruttore della classe 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. Annotare la firma di questo metodoNote the signature of this method

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

corrisponde alla firma del delegato che può essere passata al metodo FindIndex.corresponds to the signature of the delegate that can be passed to the FindIndex method. Nell'esempio viene creata un'istanza di un oggetto List<Employee>, viene aggiunto un numero di oggetti Employee, quindi viene chiamato due volte il metodo FindIndex(Int32, Int32, Predicate<T>) per eseguire la ricerca nell'intera raccolta (ovvero i membri dall'indice 0 all'indice 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). La prima volta, Cerca il primo oggetto Employee il cui campo Name inizia con "J"; la seconda volta, Cerca il primo oggetto Employee il cui campo Name inizia con "Ju".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

Commenti

Il List<T> viene cercato in futuro a partire da startIndex e termina in corrispondenza di startIndex più count meno 1, se count è maggiore di 0.The List<T> is searched forward starting at startIndex and ending at startIndex plus count minus 1, if count is greater than 0.

Il Predicate<T> è un delegato a un metodo che restituisce true se l'oggetto passato a esso corrisponde alle condizioni definite nel delegato.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. Gli elementi del List<T> corrente vengono passati singolarmente al delegato di Predicate<T>.The elements of the current List<T> are individually passed to the Predicate<T> delegate. Il delegato ha la firma:The delegate has the signature:

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

Questo metodo esegue una ricerca lineare; Pertanto, questo metodo è un'operazione O (n), dove n è count.This method performs a linear search; therefore, this method is an O(n) operation, where n is count.

Vedi anche

Si applica a