Sdílet prostřednictvím


Array.TrueForAll<T>(T[], Predicate<T>) Metoda

Definice

Určuje, zda každý prvek v poli odpovídá podmínkám definovaným zadaným predikátem.

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

Parametry typu

T

Typ prvků pole.

Parametry

array
T[]

Jednorozměrná nulová hodnota Array , která kontroluje podmínky.

match
Predicate<T>

Predikát, který definuje podmínky pro kontrolu prvků.

Návraty

Boolean

true pokud každý prvek odpovídá array podmínkám definovaným zadaným predikátem; v opačném případě false. Pokud pole neobsahuje žádné prvky, je vrácená hodnota true.

Výjimky

array je null.

-nebo-

match je null.

Příklady

Následující příklad určuje, zda poslední znak každého prvku v řetězcové matici je číslo. Vytvoří dvě řetězcová pole. První pole obsahuje oba řetězce, které končí abecedním znakem, a řetězce, které končí číselnými znaky. Druhé pole se skládá jenom z řetězců, které končí číselnými znaky. Příklad také definuje metodu EndWithANumber , jejíž podpis odpovídá delegátovi Predicate<T> . Příklad předá každé pole metodě TrueForAll spolu s delegátem, který představuje metodu 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.

Následující příklad je podobný prvnímu, s tím rozdílem, že předává řetězcové pole metodě TrueForAll spolu s výrazem lambda, který určuje, zda určitý prvek pole končí řetězcovou reprezentací čísla.

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.

V obou případech vrátí false metoda hned, TrueForAll jak narazí na první prvek pole, který nekončí číslem. V opačném případě se vrátí true po iteraci všech prvků v poli.

Poznámka

Jak ukazují oba příklady, v jazyce C# a Visual Basic není nutné delegáta explicitně vytvořit Predicate<string> (Predicate(Of String)v Visual Basic). Tyto jazyky odvozují správného delegáta z kontextu a vytvoří jej automaticky.

Poznámky

Jedná se Predicate<T> o delegáta na metodu, která vrátítrue , pokud objekt předaný odpovídá podmínkám definovaným v delegátu. Prvky array jsou jednotlivě předány do objektu Predicate<T>a zpracování je zastaveno, když delegát vrátí false pro libovolný prvek.

Tato metoda je operace O(n), kde n je Length .array

Platí pro

Viz také