Array.TrueForAll<T>(T[], Predicate<T>) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Определяет, соответствует ли каждый элемент в массиве условиям, определенным указанным предикатом.
public:
generic <typename T>
static bool TrueForAll(cli::array <T> ^ array, Predicate<T> ^ match);
public static bool TrueForAll<T>(T[] array, Predicate<T> match);
static member TrueForAll : 'T[] * Predicate<'T> -> bool
Public Shared Function TrueForAll(Of T) (array As T(), match As Predicate(Of T)) As Boolean
Параметры типа
- T
Тип элементов массива.
Параметры
- array
- T[]
Одномерный, отсчитываемый Array от нуля для проверки условий.
- match
- Predicate<T>
Предикат, определяющий условия для проверки элементов.
Возвращаемое значение
true Значение , если каждый элемент в array совпадает с условиями, определенными указанным предикатом; в противном случае false. Если в массиве нет элементов, возвращается trueвозвращаемое значение.
Исключения
Примеры
В следующем примере определяется, является ли последний символ каждого элемента в массиве строк числом. Он создает два строковых массива. Первый массив включает как строки, заканчивающиеся буквами, так и строками, заканчивающимися числовыми символами. Второй массив состоит только из строк, заканчивающихся числовыми символами. В примере также определяется метод, сигнатура EndWithANumber которого соответствует делегату Predicate<T> . В примере каждый массив TrueForAll передается методу вместе с делегатом, который представляет EndsWithANumber метод.
using System;
public class Example
{
public static void Main()
{
String[] values1 = { "Y2K", "A2000", "DC2A6", "MMXIV", "0C3" };
String[] values2 = { "Y2", "A2000", "DC2A6", "MMXIV_0", "0C3" };
if (Array.TrueForAll(values1, EndsWithANumber))
Console.WriteLine("All elements end with an integer.");
else
Console.WriteLine("Not all elements end with an integer.");
if (Array.TrueForAll(values2, EndsWithANumber))
Console.WriteLine("All elements end with an integer.");
else
Console.WriteLine("Not all elements end with an integer.");
}
private static bool EndsWithANumber(string value)
{
int s;
return int.TryParse(value.Substring(value.Length - 1), out s);
}
}
// The example displays the following output:
// Not all elements end with an integer.
// All elements end with an integer.
open System
let endsWithANumber (value: string) =
value.Substring(value.Length - 1)
|> Int32.TryParse
|> fst
let values1 = [| "Y2K"; "A2000"; "DC2A6"; "MMXIV"; "0C3" |]
let values2 = [| "Y2"; "A2000"; "DC2A6"; "MMXIV_0"; "0C3" |]
if Array.TrueForAll(values1, endsWithANumber) then
printfn "All elements end with an integer."
else
printfn "Not all elements end with an integer."
if Array.TrueForAll(values2, endsWithANumber) then
printfn "All elements end with an integer."
else
printfn "Not all elements end with an integer."
// The example displays the following output:
// Not all elements end with an integer.
// All elements end with an integer.
Module Example
Public Sub Main()
Dim values1() As String = { "Y2K", "A2000", "DC2A6", "MMXIV", "0C3" }
Dim values2() As String = { "Y2", "A2000", "DC2A6", "MMXIV_0", "0C3" }
If Array.TrueForAll(values1, AddressOf EndsWithANumber) Then
Console.WriteLine("All elements end with an integer.")
Else
Console.WriteLine("Not all elements end with an integer.")
End If
If Array.TrueForAll(values2, AddressOf EndsWithANumber) Then
Console.WriteLine("All elements end with an integer.")
Else
Console.WriteLine("Not all elements end with an integer.")
End If
End Sub
Private Function EndsWithANumber(value As String) As Boolean
Dim s As Integer
Return Int32.TryParse(value.Substring(value.Length - 1), s)
End Function
End Module
' The example displays the following output:
' Not all elements end with an integer.
' All elements end with an integer.
Следующий пример аналогичен первому, за исключением того, что он передает массив строк методу TrueForAll вместе с лямбда-выражением, которое определяет, заканчивается ли определенный элемент массива строковым представлением числа.
using System;
public class Example
{
public static void Main()
{
String[] values = { "Y2K", "A2000", "DC2A6", "MMXIV", "0C3" };
if (Array.TrueForAll(values, value => {
int s;
return int.TryParse(value.Substring(value.Length - 1), out s); }
))
Console.WriteLine("All elements end with an integer.");
else
Console.WriteLine("Not all elements end with an integer.");
}
}
// The example displays the following output:
// Not all elements end with an integer.
open System
let values = [| "Y2K"; "A2000"; "DC2A6"; "MMXIV"; "0C3" |]
if Array.TrueForAll(values,
fun value ->
value.Substring(value.Length - 1)
|> Int32.TryParse
|> fst) then
printfn "All elements end with an integer."
else
printfn "Not all elements end with an integer."
// The example displays the following output:
// Not all elements end with an integer.
Module Example
Public Sub Main()
Dim values() As String = { "Y2K", "A2000", "DC2A6", "MMXIV", "0C3" }
'Dim values2() As String = { "Y2", "A2000", "DC2A6", "MMXIV_0", "0C3" }
If Array.TrueForAll(values, Function(value)
Dim s As Integer
Return Int32.TryParse(value.Substring(value.Length - 1), s)
End Function) Then
Console.WriteLine("All elements end with an integer.")
Else
Console.WriteLine("Not all elements end with an integer.")
End If
End Sub
End Module
' The example displays the following output:
' Not all elements end with an integer.
В обоих случаях TrueForAll метод возвращается false , как только он встречает первый элемент массива, который не заканчивается числом. В противном случае он возвращается true после итерации всех элементов в массиве.
Note
Как показано в обоих примерах, в C# и Visual Basic не требуется явно создать делегат Predicate<string> (Predicate(Of String) в Visual Basic). Эти языки выводит правильный делегат из контекста и автоматически создает его.
Комментарии
Это делегат метода, который возвращаетPredicate<T>, true если объект, переданный в него, соответствует условиям, определенным в делегате. Элементы передаются в arrayотдельные элементыPredicate<T>, а обработка останавливается при возврате false делегата для любого элемента.
Этот метод является операцией O(n), где n находится Length .array