Бөлісу құралы:


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>

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

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

Boolean

Значение true, если каждый элемент массива array удовлетворяет условиям заданного предиката; в противном случае — значение false. Если элементы в массиве отсутствуют, возвращается значение true.

Исключения

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

-или-

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

Примеры

В следующем примере определяется, является ли последний символ каждого элемента в строковом массиве числом. Он создает два строковых массива. Первый массив содержит обе строки, заканчивающиеся буквами и строками, заканчивающимися числовыми символами. Второй массив состоит только из строк, заканчивающихся числовыми символами. В этом примере также определяется метод, сигнатура 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

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

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