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
после итерации всех элементов в массиве.
Примечание
Как показано в обоих примерах, в C# и Visual Basic явно создать Predicate<string>
делегат (Predicate(Of String)
в Visual Basic). Эти языки определяют правильный делегат из контекста и создают его автоматически.
Комментарии
Это Predicate<T> делегат метода, который возвращаетtrue
, если объект, переданный ему, соответствует условиям, определенным в делегате. Элементы передаются в отдельный array
Predicate<T>объект, и обработка останавливается при возврате false
делегата для любого элемента.
Этот метод является операцией O(n
), где n
находится Length .array