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[]

条件が一致するかどうかをチェックする 1 次元の Array。インデックス番号は 0 から始まります。

match
Predicate<T>

要素についてチェックする条件を定義する述語。

戻り値

array 内のすべての要素が、指定された述語によって定義された条件と一致する場合は true。それ以外の場合は false。 配列内に要素がない場合、戻り値は true です。

例外

arraynullです。

または

matchnullです。

次の例では、文字列配列内の各要素の最後の文字が数値かどうかを判断します。 2 つの文字列配列を作成します。 最初の配列には、アルファベットで終わる文字列と、数字で終わる文字列の両方が含まれます。 2 番目の配列は、数字で終わる文字列のみで構成されます。 この例では、デリゲートに 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(Of String)Visual Basic では) をPredicate<string>明示的に作成する必要はありません。 これらの言語は、コンテキストから正しいデリゲートを推論し、自動的に作成します。

注釈

Predicate<T>は、渡されたオブジェクトがデリゲートで定義されている条件と一致する場合に を返すtrueメソッドへのデリゲートです。 の array 要素は に個別に渡され Predicate<T>、デリゲートから任意の要素が返 false されると処理が停止されます。

このメソッドは O(n) 操作です。ここで nLength は の arrayです。

適用対象

こちらもご覧ください