Прочитать на английском

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


Array.Find<T>(T[], Predicate<T>) Метод

Определение

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

C#
public static T Find<T>(T[] array, Predicate<T> match);
C#
public static T? Find<T>(T[] array, Predicate<T> match);

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

T

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

Параметры

array
T[]

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

match
Predicate<T>

Предикат, определяющий условия элемента для поиска.

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

T

Первый элемент, соответствующий условиям, определенным указанным предикатом, при обнаружении; в противном случае значение по умолчанию для типа T.

Исключения

array null.

-или-

match null.

Примеры

В следующем примере используется делегат Predicate<T> с универсальным методом Find для поиска массива структур Point. Метод, представляющий делегат, ProductGT10, возвращает true, если произведение полей X и Y превышает 100 000. Метод Find вызывает делегат для каждого элемента массива, возвращая первую точку, которая соответствует условию теста.

Примечание

Пользователям Visual Basic, C#и F# не нужно явно создавать делегат или указывать аргумент типа универсального метода. Компиляторы определяют необходимые типы из аргументов метода, которые вы предоставляете.

C#
using System;
using System.Drawing;

public class Example
{
    public static void Main()
    {
        // Create an array of five Point structures.
        Point[] points = { new Point(100, 200),
            new Point(150, 250), new Point(250, 375),
            new Point(275, 395), new Point(295, 450) };

        // Find the first Point structure for which X times Y
        // is greater than 100000.
        Point first = Array.Find(points, ProductGT10);

        // Display the first structure found.
        Console.WriteLine("Found: X = {0}, Y = {1}", first.X, first.Y);
    }

    // Return true if X times Y is greater than 100000.
    private static bool ProductGT10(Point p)
    {
        return p.X * p.Y > 100000;
    }
}
// The example displays the following output:
//       Found: X = 275, Y = 395

Вместо явного определения метода с необходимой подписью, создания экземпляра делегата Predicate<T> и передачи делегата в метод Find обычно используется лямбда-выражение. Следующий пример идентичен предыдущему, за исключением того, что он использует лямбда-выражение в качестве аргумента match.

C#
using System;
using System.Drawing;

public class Example
{
    public static void Main()
    {
        // Create an array of five Point structures.
        Point[] points = { new Point(100, 200),
            new Point(150, 250), new Point(250, 375),
            new Point(275, 395), new Point(295, 450) };

        // Find the first Point structure for which X times Y
        // is greater than 100000.
        Point first = Array.Find(points, p => p.X * p.Y > 100000);

        // Display the first structure found.
        Console.WriteLine("Found: X = {0}, Y = {1}", first.X, first.Y);
    }
}
// The example displays the following output:
//       Found: X = 275, Y = 395

Комментарии

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

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

В F#вместо этого можно использовать функцию array.find.

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

Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

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