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

Definition

Avgör om varje element i matrisen matchar de villkor som definieras av det angivna predikatet.

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

Typparametrar

T

Typ av element i matrisen.

Parametrar

array
T[]

Den endimensionella, nollbaserade Array för att kontrollera villkoren.

match
Predicate<T>

Predikatet som definierar villkoren för att kontrollera mot elementen.

Returer

trueom varje element i array matchar de villkor som definierats av det angivna predikatet, annars . false Om det inte finns några element i matrisen är truereturvärdet .

Undantag

array är null.

-eller-

match är null.

Exempel

I följande exempel avgörs om det sista tecknet för varje element i en strängmatris är ett tal. Den skapar två strängmatriser. Den första matrisen innehåller både strängar som slutar med alfabetiska tecken och strängar som slutar med numeriska tecken. Den andra matrisen består bara av strängar som slutar med numeriska tecken. Exemplet definierar också en EndWithANumber metod vars signatur matchar ombudet Predicate<T> . Exemplet skickar varje matris till TrueForAll metoden tillsammans med ett ombud som representerar EndsWithANumber metoden.

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.

Följande exempel liknar det första, förutom att det skickar strängmatrisen TrueForAll till metoden tillsammans med ett lambda-uttryck som avgör om ett visst matriselement slutar med strängrepresentationen av ett tal.

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.

I båda fallen TrueForAll returnerar false metoden så fort den stöter på det första matriselementet som inte slutar med ett tal. Annars returneras true den efter iterering av alla element i matrisen.

Note

Som båda exemplen visar i C# och Visual Basic är det inte nödvändigt att skapa Predicate<string>-ombudet (Predicate(Of String) i Visual Basic) explicit. Dessa språk härleder rätt ombud från kontexten och skapar det automatiskt.

Kommentarer

Predicate<T> är ett ombud till en metod som returnerartrue om objektet som skickas till det matchar de villkor som definierats i ombudet. Elementen array i skickas individuellt till Predicate<T>, och bearbetningen stoppas när ombudet returnerar false för alla element.

Den här metoden är en O()-nåtgärd, där n är för Lengtharray.

Gäller för

Se även