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>

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

戻り値

Boolean

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 では、デリゲート (Visual Basic) を明示的に Predicate<string> Predicate(Of String) 作成する必要はありません。 これらの言語では、コンテキストから正しいデリゲートがインジェストされ、自動的に作成されます。

注釈

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

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

適用対象

こちらもご覧ください