Поделиться через


Array.FindIndex Метод

Определение

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс первого вхождения в пределах всего массива Array или его части.

Перегрузки

FindIndex<T>(T[], Predicate<T>)

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс первого найденного вхождения в пределах всего списка Array.

FindIndex<T>(T[], Int32, Predicate<T>)

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс первого вхождения в диапазоне элементов списка Array, начиная с заданного индекса и заканчивая последним элементом.

FindIndex<T>(T[], Int32, Int32, Predicate<T>)

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс первого вхождения в диапазоне элементов списка Array, начинающемся с заданного индекса и содержащем указанное число элементов.

Примеры

В следующем примере кода показаны все три перегрузки универсального FindIndex метода. Создается массив строк, содержащий 8 имен динозавров, два из которых (на позициях 1 и 5) заканчиваются на "saurus". В примере кода также определяется метод предиката поиска с именем EndsWithSaurus, который принимает строковый параметр и возвращает логическое значение, указывающее, заканчивается ли входная строка на "saurus".

Перегрузка FindIndex<T>(T[], Predicate<T>) метода проходит массив с самого начала, передавая каждый элемент в метод .EndsWithSaurus Поиск останавливается, EndsWithSaurus когда метод возвращает true элемент в позиции 1.

Примечание

В C#, F# и Visual Basic необязательно явно создавать Predicate<string> делегат (Predicate(Of String) в Visual Basic). Эти языки определяют правильный делегат из контекста и создают его автоматически.

Перегрузка FindIndex<T>(T[], Int32, Predicate<T>) метода используется для поиска массива, начинающегося с позиции 2 и продолжающегося до конца массива. Он находит элемент в позиции 5. Наконец, перегрузка FindIndex<T>(T[], Int32, Int32, Predicate<T>) метода используется для поиска в диапазоне трех элементов, начиная с позиции 2. Он возвращает -1, потому что в этом диапазоне нет имен динозавров, которые заканчиваются на "saurus".

using namespace System;

// Search predicate returns true if a string ends in "saurus".
bool EndsWithSaurus(String^ s)
{
    if ((s->Length > 5) && 
        (s->Substring(s->Length - 6)->ToLower() == "saurus"))
    {
        return true;
    }
    else
    {
        return false;
    }
};

void main()
{
    array<String^>^ dinosaurs = { "Compsognathus", 
        "Amargasaurus",   "Oviraptor",      "Velociraptor", 
        "Deinonychus",    "Dilophosaurus",  "Gallimimus", 
        "Triceratops" };

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs )
    {
        Console::WriteLine(dinosaur);
    }

    Console::WriteLine("\nArray::FindIndex(dinosaurs, EndsWithSaurus): {0}", 
        Array::FindIndex(dinosaurs, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::FindIndex(dinosaurs, 2, EndsWithSaurus): {0}",
        Array::FindIndex(dinosaurs, 2, gcnew Predicate<String^>(EndsWithSaurus)));

    Console::WriteLine("\nArray::FindIndex(dinosaurs, 2, 3, EndsWithSaurus): {0}",
        Array::FindIndex(dinosaurs, 2, 3, gcnew Predicate<String^>(EndsWithSaurus)));
}

/* This code example produces the following output:

Compsognathus
Amargasaurus
Oviraptor
Velociraptor
Deinonychus
Dilophosaurus
Gallimimus
Triceratops

Array::FindIndex(dinosaurs, EndsWithSaurus): 1

Array::FindIndex(dinosaurs, 2, EndsWithSaurus): 5

Array::FindIndex(dinosaurs, 2, 3, EndsWithSaurus): -1
 */
using System;

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = { "Compsognathus",
            "Amargasaurus",   "Oviraptor",      "Velociraptor",
            "Deinonychus",    "Dilophosaurus",  "Gallimimus",
            "Triceratops" };

        Console.WriteLine();
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine(
            "\nArray.FindIndex(dinosaurs, EndsWithSaurus): {0}",
            Array.FindIndex(dinosaurs, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.FindIndex(dinosaurs, 2, EndsWithSaurus): {0}",
            Array.FindIndex(dinosaurs, 2, EndsWithSaurus));

        Console.WriteLine(
            "\nArray.FindIndex(dinosaurs, 2, 3, EndsWithSaurus): {0}",
            Array.FindIndex(dinosaurs, 2, 3, EndsWithSaurus));
    }

    // Search predicate returns true if a string ends in "saurus".
    private static bool EndsWithSaurus(String s)
    {
        if ((s.Length > 5) &&
            (s.Substring(s.Length - 6).ToLower() == "saurus"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

/* This code example produces the following output:

Compsognathus
Amargasaurus
Oviraptor
Velociraptor
Deinonychus
Dilophosaurus
Gallimimus
Triceratops

Array.FindIndex(dinosaurs, EndsWithSaurus): 1

Array.FindIndex(dinosaurs, 2, EndsWithSaurus): 5

Array.FindIndex(dinosaurs, 2, 3, EndsWithSaurus): -1
 */
open System

// Search predicate returns true if a string ends in "saurus".
let endsWithSaurus (s: string) =
    s.Length > 5 && s.Substring(s.Length - 6).ToLower() = "saurus"

let dinosaurs =
    [| "Compsognathus"; "Amargasaurus"
       "Oviraptor"; "Velociraptor"
       "Deinonychus"; "Dilophosaurus"
       "Gallimimus"; "Triceratops" |]

printfn ""
for dino in dinosaurs do
    printfn $"{dino}"

Array.FindIndex(dinosaurs, endsWithSaurus)
|> printfn "\nArray.FindIndex(dinosaurs, EndsWithSaurus): %i"

Array.FindIndex(dinosaurs, 2, endsWithSaurus)
|> printfn "\nArray.FindIndex(dinosaurs, 2, EndsWithSaurus): %i"

Array.FindIndex(dinosaurs, 2, 3, endsWithSaurus)
|> printfn "\nArray.FindIndex(dinosaurs, 2, 3, EndsWithSaurus): %i"


// This code example produces the following output:
//
//     Compsognathus
//     Amargasaurus
//     Oviraptor
//     Velociraptor
//     Deinonychus
//     Dilophosaurus
//     Gallimimus
//     Triceratops
//
//     Array.FindIndex(dinosaurs, EndsWithSaurus): 1
//
//     Array.FindIndex(dinosaurs, 2, EndsWithSaurus): 5
//
//     Array.FindIndex(dinosaurs, 2, 3, EndsWithSaurus): -1
Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs() As String = { "Compsognathus", _
            "Amargasaurus",   "Oviraptor",      "Velociraptor", _
            "Deinonychus",    "Dilophosaurus",  "Gallimimus", _
            "Triceratops" }

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & _
            "Array.FindIndex(dinosaurs, AddressOf EndsWithSaurus): {0}", _
            Array.FindIndex(dinosaurs, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.FindIndex(dinosaurs, 2, AddressOf EndsWithSaurus): {0}", _
            Array.FindIndex(dinosaurs, 2, AddressOf EndsWithSaurus))

        Console.WriteLine(vbLf & _
            "Array.FindIndex(dinosaurs, 2, 3, AddressOf EndsWithSaurus): {0}", _
            Array.FindIndex(dinosaurs, 2, 3, AddressOf EndsWithSaurus))

    End Sub

    ' Search predicate returns true if a string ends in "saurus".
    Private Shared Function EndsWithSaurus(ByVal s As String) _
        As Boolean

        ' AndAlso prevents evaluation of the second Boolean
        ' expression if the string is so short that an error
        ' would occur.
        If (s.Length > 5) AndAlso _
            (s.Substring(s.Length - 6).ToLower() = "saurus") Then
            Return True
        Else
            Return False
        End If
    End Function
End Class

' This code example produces the following output:
'
'Compsognathus
'Amargasaurus
'Oviraptor
'Velociraptor
'Deinonychus
'Dilophosaurus
'Gallimimus
'Triceratops
'
'Array.FindIndex(dinosaurs, AddressOf EndsWithSaurus): 1
'
'Array.FindIndex(dinosaurs, 2, AddressOf EndsWithSaurus): 5
'
'Array.FindIndex(dinosaurs, 2, 3, AddressOf EndsWithSaurus): -1

FindIndex<T>(T[], Predicate<T>)

Исходный код:
Array.cs
Исходный код:
Array.cs
Исходный код:
Array.cs

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс первого найденного вхождения в пределах всего списка Array.

public:
generic <typename T>
 static int FindIndex(cli::array <T> ^ array, Predicate<T> ^ match);
public static int FindIndex<T> (T[] array, Predicate<T> match);
static member FindIndex : 'T[] * Predicate<'T> -> int
Public Shared Function FindIndex(Of T) (array As T(), match As Predicate(Of T)) As Integer

Параметры типа

T

Тип элементов массива.

Параметры

array
T[]

Одномерный массив Array, индексация которого начинается с нуля и в котором нужно выполнить поиск.

match
Predicate<T>

Объект Predicate<T>, определяющий условия поиска элемента.

Возвращаемое значение

Отсчитываемый от нуля индекс первого вхождения элемента, отвечающего условиям предиката match, если такой элемент найден. В противном случае значение –1.

Исключения

array имеет значение null.

-или-

match имеет значение null.

Комментарии

Выполняется Array поиск вперед, начиная с первого элемента и заканчивая последним элементом.

Predicate<T> это делегат метода, который возвращает true значение , если переданный ему объект соответствует условиям, определенным в делегате. Элементы по отдельности array передаются в Predicate<T>.

Этот метод является операцией O(n), где n — из Lengtharray.

См. также раздел

Применяется к

FindIndex<T>(T[], Int32, Predicate<T>)

Исходный код:
Array.cs
Исходный код:
Array.cs
Исходный код:
Array.cs

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс первого вхождения в диапазоне элементов списка Array, начиная с заданного индекса и заканчивая последним элементом.

public:
generic <typename T>
 static int FindIndex(cli::array <T> ^ array, int startIndex, Predicate<T> ^ match);
public static int FindIndex<T> (T[] array, int startIndex, Predicate<T> match);
static member FindIndex : 'T[] * int * Predicate<'T> -> int
Public Shared Function FindIndex(Of T) (array As T(), startIndex As Integer, match As Predicate(Of T)) As Integer

Параметры типа

T

Тип элементов массива.

Параметры

array
T[]

Одномерный массив Array, индексация которого начинается с нуля и в котором нужно выполнить поиск.

startIndex
Int32

Индекс (с нуля) начальной позиции поиска.

match
Predicate<T>

Объект Predicate<T>, определяющий условия поиска элемента.

Возвращаемое значение

Отсчитываемый от нуля индекс первого вхождения элемента, отвечающего условиям предиката match, если такой элемент найден. В противном случае значение –1.

Исключения

array имеет значение null.

-или-

match имеет значение null.

startIndex находится вне диапазона допустимых индексов для array.

Комментарии

Выполняется Array поиск вперед, начиная с startIndex и заканчивая последним элементом.

Predicate<T> это делегат метода, который возвращает true значение , если переданный ему объект соответствует условиям, определенным в делегате. Элементы по отдельности array передаются в Predicate<T>.

Этот метод является операцией O(n), где n — количество элементов от startIndex до конца array.

См. также раздел

Применяется к

FindIndex<T>(T[], Int32, Int32, Predicate<T>)

Исходный код:
Array.cs
Исходный код:
Array.cs
Исходный код:
Array.cs

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс первого вхождения в диапазоне элементов списка Array, начинающемся с заданного индекса и содержащем указанное число элементов.

public:
generic <typename T>
 static int FindIndex(cli::array <T> ^ array, int startIndex, int count, Predicate<T> ^ match);
public static int FindIndex<T> (T[] array, int startIndex, int count, Predicate<T> match);
static member FindIndex : 'T[] * int * int * Predicate<'T> -> int
Public Shared Function FindIndex(Of T) (array As T(), startIndex As Integer, count As Integer, match As Predicate(Of T)) As Integer

Параметры типа

T

Тип элементов массива.

Параметры

array
T[]

Одномерный массив Array, индексация которого начинается с нуля и в котором нужно выполнить поиск.

startIndex
Int32

Индекс (с нуля) начальной позиции поиска.

count
Int32

Число элементов в диапазоне, в котором выполняется поиск.

match
Predicate<T>

Объект Predicate<T>, определяющий условия поиска элемента.

Возвращаемое значение

Отсчитываемый от нуля индекс первого вхождения элемента, отвечающего условиям предиката match, если такой элемент найден. В противном случае значение –1.

Исключения

array имеет значение null.

-или-

match имеет значение null.

startIndex находится вне диапазона допустимых индексов для array.

-или-

Значение параметра count меньше нуля.

-или-

startIndex и count не указывают допустимый раздел в array.

Комментарии

Выполняется Array поиск вперед, начиная с startIndex и заканчивая startIndex плюс count минус 1, если count больше 0.

Predicate<T> это делегат метода, который возвращает true значение , если переданный ему объект соответствует условиям, определенным в делегате. Элементы по отдельности array передаются в Predicate<T>.

Этот метод является операцией O(n), где n — .count

См. также раздел

Применяется к