Array.TrueForAll<T>(T[], Predicate<T>) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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
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
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