{Array-2-of t:Type} (クラス)
public Array-2-of {inherits {Aggregate-of t}}
パッケージ: CURL.LANGUAGE.CONTAINERS

2 次元配列のパラメータ化クラス。

t: 配列内の要素のデータ型。

説明

Curl言語には、以下のようなコレクション タイプが組み込まれています。



Array-2-of を使用すると、拡張可能な 2 次元配列を作成できます。

Curl では FastArray を使用して、内部的に配列を表します。Array-2-of.to-Iterator などのメソッドを使用する場合、内部表現での要素の順序を把握する必要があります。Curl は、第 1 次元の各インデックスの要素を順に格納します。第 1 次元のインデックスの要素を格納する場合、Curl は第 2 次元の各インデックスの要素を順に格納します。たとえば、Curl では 2 x 3 配列の要素が以下のように格納されます。

(0,0), (0,1), (0,2), (1,0), (1,1), (1,2)

注意事項

Curl のコレクションクラスの部分階層は次のようになります。
Curl のコレクションの詳細は、Curl 開発者ガイド: コレクションを参照してください。

注意事項

コレクションを反復処理中にコレクションの内容を変更することは出来ません。

コンストラクタ
clone-from:要素の 2 次元配列を初期化します。
コンストラクタ public {Array-2-of.clone-from from:{Array-2-of t}}
default:要素の 2 次元配列を初期化します。
コンストラクタ public {Array-2-of.default s1:int, s0:int}

プロパティ
empty?:コレクションが空かどうかを調べます。
アクセサ public final inline Array-2-of.empty?:bool
underlying-FastArray:配列の内部表現を返します。
フィールド public-get private-set Array-2-of.underlying-FastArray:{FastArray-of t}
プロパティ 継承 Aggregate-of: element-type

メソッド
clear:すべての要素をクリアします。
public {Array-2-of.clear}:void
clone:コレクションのクローンを返します。
public {Array-2-of.clone}:{Array-2-of t}
equal?:2 つの配列が等しいかどうかを調べます。
public {Array-2-of.equal? a2:{Array-2-of t}}:bool
filter:実装されていません。呼び出さないでください。
public {Array-2-of.filter p:{proc-type {t}:bool}}:void
filter-clone:実装されていません。呼び出さないでください。
public {Array-2-of.filter-clone
p:{proc-type {t}:bool}
}:{Aggregate-of t}
get:特定の要素を返します。
public final {Array-2-of.get x1:int, x0:int}:t
in-bounds?:2 次元インデックスが存在するかどうかを調べます。
public final {Array-2-of.in-bounds? x1:int, x0:int}:bool
set:要素の値を設定します。
public final {Array-2-of.set x1:int, x0:int, element:t}:void
set-size:配列のサイズを設定します。
public {Array-2-of.set-size s1:int, s0:int}:void
size:配列のサイズを返します。
public final inline {Array-2-of.size}:(s1:int, s0:int)
to-Iterator:配列の各要素を含む Iterator-of を返します。
public {Array-2-of.to-Iterator}:{Iterator-of t}
メソッド 継承 Object: object-describe, object-describe-for-debugging, object-serialize



コンストラクタ詳細
clone-from (コンストラクタ)
public {Array-2-of.clone-from from:{Array-2-of t}}

要素の 2 次元配列を初期化します。

from: self 内の初期コンテンツおよび次元を from からコピーします。


default (コンストラクタ)
public {Array-2-of.default s1:int, s0:int}

要素の 2 次元配列を初期化します。

s1, s0: 配列の次元を指定する int 値。s1 は配列の第 1 次元、s0 配列の第 2 次元。

次のコードは、String2 x 3 配列を作成します。

let my-array:{Array-2-of String} =
    {new {Array-2-of String}, 2, 3}

注意事項

2 次元配列を作成する場合、初期要素を指定することはできません。



プロパティ詳細
empty? (アクセサ)
アクセサ public final inline Array-2-of.empty?:bool

コレクションが空かどうかを調べます。

戻り値

bool 値。self に要素がない場合、true を返します。それ以外の場合は、false を返します。

次の例は、要素を持たない配列を示しています。


{value
    || Create a two-dimensional array of String.
    let my-array:{Array-2-of String} =
        {new {Array-2-of String}, 0, 0}

    || Check if the array is empty and display an
    || appropriate message.
    {if my-array.empty? then
        {text The array is empty!}
     else
        {text The array has elements!}
    }
}


次の例は、要素を持つ配列を示しています。


{value
    || Create a two-dimensional array of String.
    let my-array:{Array-2-of String} =
        {new {Array-2-of String}, 2, 3}

    || Fill the array with elements.
    set my-array[0, 0] = "Harry"
    set my-array[1, 0] = "Sally"
    set my-array[0, 1] = "Tom"
    set my-array[1, 1] = "Mary"
    set my-array[0, 2] = "John"
    set my-array[1, 2] = "Anne"

    || Check if the array is empty and display an
    || appropriate message.
    {if my-array.empty? then
        {text The array is empty!}
     else
        {text The array has elements!}
    }
}


underlying-FastArray (フィールド)
public-get private-set Array-2-of.underlying-FastArray:{FastArray-of t}

配列の内部表現を返します。

戻り値

self と同じ要素タイプを持つ FastArray-of

説明

配列を内部的に表すために、Curl では FastArray-of を使用します。このゲッターは、内部的に self を表す FastArray-of を返します。





メソッド詳細
clear (メソッド)
public {Array-2-of.clear}:void

すべての要素をクリアします。

説明

配列内のすべての要素値を、要素のデータ型のデフォルト値に設定します。


|| Create a two-dimensional array of String.
{let my-array:{Array-2-of String} =
    {new {Array-2-of String}, 2, 3}}

|| Fill the array with elements.
{set my-array[0, 0] = "Harry"}
{set my-array[1, 0] = "Sally"}
{set my-array[0, 1] = "Tom"}
{set my-array[1, 1] = "Mary"}
{set my-array[0, 2] = "John"}
{set my-array[1, 2] = "Anne"}

|| Clear the array.
{my-array.clear}

|| Display the value of an element
{text The value of the element at (0,0) is...
    {value my-array[0, 0]}}

|| Notice that even though the array is clear,
|| it is not empty.

|| Check if the array is empty and display an
|| appropriate message.
{if my-array.empty? then
    {text The array is empty!}
 else
    {text The array has elements!}
}

注意事項

Aggregate-of.clearArray-of.clear メソッドは、コレクションからすべての要素を削除します。このメソッドは、配列から要素を削除するのではなく、配列内の要素の値を、要素のデータ型のデフォルト値に変更するだけです。つまり、clear メソッドには 1 次元配列および 2 次元配列に対する異なる意味があります。


clone (メソッド)
public {Array-2-of.clone}:{Array-2-of t}

コレクションのクローンを返します。

戻り値

Array-2-of のインスタンス。オブジェクトは、self と同じデータ型およびデータを持ちます。

説明

クローンは、self と同じデータ型を持つ新しいオブジェクトです。クローンには、self の要素の簡易コピー(shallow copy) が含まれます。つまり、どちらかのコレクションの要素に新しいオブジェクトを代入すると、もう一方の一致した要素は元のオブジェクトを参照します。ただし、要素のオブジェクトを変更すると、両方のコレクションは変更したオブジェクトを参照します。


{value
    || Create a two-dimensional array of String.
    let array-1:{Array-2-of String} =
        {new {Array-2-of String}, 2, 3}

    || Fill the array with elements.
    set array-1[0, 0] = "Harry"
    set array-1[1, 0] = "Sally"
    set array-1[0, 1] = "Tom"
    set array-1[1, 1] = "Mary"
    set array-1[0, 2] = "John"
    set array-1[1, 2] = "Anne"

    || Initialize array-2 with a clone of the contents of
    || array-1.
    let array-2:{Array-2-of String} = {array-1.clone}

    || Use a VBox to display the contents of array-2.
    || Iterate over the contents of array-2, adding
    || them to the VBox.  Then display the VBox.
    let message:VBox = {VBox}
    {for each-element:String in array-2 do
        {message.add each-element}
    }
    message
}

注意事項

クローンの詳細については、『Curl 開発者ガイド』の「コレクション:配列」で、クローンに関するセクションを参照してください。


equal? (メソッド)
public {Array-2-of.equal? a2:{Array-2-of t}}:bool

2 つの配列が等しいかどうかを調べます。

a2: Array-2-of オブジェクト。これは self の比較対象となる配列です。

戻り値

コレクションが等しいかどうかを示す bool。このメソッドは、コレクションが等しいと true を返し、コレクションが異なると false を返します。

説明

selfa2 と比較します。両方のコレクションが同じタイプおよび次元を持ち、self の各要素が a2 の対応する要素に等しい場合、両方のコレクションは等しくなります。要素の同等性のテストでは、== を使って比較を実行します。


|| Create a two-dimensional array of String.
{let array-1:{Array-2-of String} =
    {new {Array-2-of String}, 2, 3}}

|| Fill the array with elements.
{set array-1[0, 0] = "Harry"}
{set array-1[1, 0] = "Sally"}
{set array-1[0, 1] = "Tom"}
{set array-1[1, 1] = "Mary"}
{set array-1[0, 2] = "John"}
{set array-1[1, 2] = "Anne"}

|| Create another two-dimensional array of String.
{let array-2:{Array-2-of String} =
    {new {Array-2-of String}, 2, 2}}

|| Fill the array with elements.
{set array-2[0, 0] = "Harry"}
{set array-2[1, 0] = "Sally"}
{set array-2[0, 1] = "Tom"}
{set array-2[1, 1] = "Mary"}

|| Determine if the arrays are equal.
Originally, the arrays are equal is...
{array-1.equal? array-2}

|| Change the size of array-2 and fill the new
|| elements.
{array-2.set-size 2, 3}
{set array-2[0, 2] = "John"}
{set array-2[1, 2] = "Anne"}

|| And test the arrays for equality again.
After modification, the arrays are equal is...
{array-1.equal? array-2}


filter (メソッド)
public {Array-2-of.filter p:{proc-type {t}:bool}}:void

実装されていません。呼び出さないでください。

説明

このメソッドは Aggregate-of.filter から継承されます。ただし、このメソッドは多次元配列では使用できません。このメソッドを呼び出すと、Error がスローされます。


filter-clone (メソッド)
public {Array-2-of.filter-clone
p:{proc-type {t}:bool}
}:{Aggregate-of t}

実装されていません。呼び出さないでください。

説明

このメソッドは Aggregate-of.filter-clone から継承されます。ただし、このメソッドは多次元配列では使用できません。このメソッドを呼び出すと、Error がスローされます。


get (メソッド)
public final {Array-2-of.get x1:int, x0:int}:t

特定の要素を返します。

x1, x0: 取得する要素のインデックスを指定する int 値。

戻り値

取得する要素。戻り値は self の要素と同じデータ型を持ちます。

説明

インデックス [x1, x0] に対応する self 内の要素を返します。


|| Create a two-dimensional array of String.
{let my-array:{Array-2-of String} =
    {new {Array-2-of String}, 2, 3}}

|| Fill the array with elements.
{set my-array[0, 0] = "Harry"}
{set my-array[1, 0] = "Sally"}
{set my-array[0, 1] = "Tom"}
{set my-array[1, 1] = "Mary"}
{set my-array[0, 2] = "John"}
{set my-array[1, 2] = "Anne"}

|| Display the element at index [0, 2].
{my-array.get 0, 2}

注意事項

配列アクセス式を使って類似機能を実行できます。たとえば次のようになります。


{value
    || Create a two-dimensional array of String.
    let my-array:{Array-2-of String} =
        {new {Array-2-of String}, 2, 3}

    || Fill the array with elements.
    set my-array[0, 0] = "Harry"
    set my-array[1, 0] = "Sally"
    set my-array[0, 1] = "Tom"
    set my-array[1, 1] = "Mary"
    set my-array[0, 2] = "John"
    set my-array[1, 2] = "Anne"

    || Display the element at index [0, 2].
    my-array[0, 2]
}


in-bounds? (メソッド)
public final {Array-2-of.in-bounds? x1:int, x0:int}:bool

2 次元インデックスが存在するかどうかを調べます。

x1, x0: 調べる2 次元インデックスを指定する int のペア。

戻り値

bool 値。x1, x0self への有効な 2 次元インデックスである場合、このメソッドは true を返します。それ以外の場合は、false を返します。


|| Create a two-dimensional array of String.
{let my-array:{Array-2-of String} =
    {new {Array-2-of String}, 2, 3}}

|| Fill the array with elements.
{set my-array[0, 0] = "Harry"}
{set my-array[1, 0] = "Sally"}
{set my-array[0, 1] = "Tom"}
{set my-array[1, 1] = "Mary"}
{set my-array[0, 2] = "John"}
{set my-array[1, 2] = "Anne"}

|| Check if some indices are valid.
[0, 0] is in bounds... {my-array.in-bounds? 0, 0}

[0, 2] is in bounds... {my-array.in-bounds? 0, 2}

[2, 0] is in bounds... {my-array.in-bounds? 2, 0}

[1, 1] is in bounds... {my-array.in-bounds? 1, 1}


set (メソッド)
public final {Array-2-of.set x1:int, x0:int, element:t}:void

要素の値を設定します。

x1, x0: 設定する要素のインデックスを指定する int 値。
element: 要素の値。この値は、selfの要素と同じデータ型を持つ必要があります。

説明

[x1, x0] の要素が self に存在する場合、このメソッドで要素の値が element に変更されます。[x1, x0] の要素が存在しない場合、このメソッドで ArrayBoundsException がスローされます。


{value
    || Create a two-dimensional array of String.
    let my-array:{Array-2-of String} =
        {new {Array-2-of String}, 2, 3}

    || Fill the array with elements.
    {my-array.set 0, 0, "Harry"}
    {my-array.set 1, 0, "Sally"}
    {my-array.set 0, 1, "Tom"}
    {my-array.set 1, 1, "Mary"}
    {my-array.set 0, 2, "John"}
    {my-array.set 1, 2, "Anne"}

    || Use a VBox to display the contents of the array.
    || Iterate over the contents of the array, adding
    || them to the VBox.  Then display the VBox.
    let message:VBox = {VBox}
    {for each-element:String in my-array do
        {message.add each-element}
    }
    message
}

注意事項

set 式と配列アクセス式を使って類似機能を実行できます。次に例を示します。


{value
    || Create a two-dimensional array of String.
    let my-array:{Array-2-of String} =
        {new {Array-2-of String}, 2, 3}

    || Fill the array with elements.
    set my-array[0, 0] = "Harry"
    set my-array[1, 0] = "Sally"
    set my-array[0, 1] = "Tom"
    set my-array[1, 1] = "Mary"
    set my-array[0, 2] = "John"
    set my-array[1, 2] = "Anne"

    || Use a VBox to display the contents of the array.
    || Iterate over the contents of the array, adding
    || them to the VBox.  Then display the VBox.
    let message:VBox = {VBox}
    {for each-element:String in my-array do
        {message.add each-element}
    }
    message
}


set-size (メソッド)
public {Array-2-of.set-size s1:int, s0:int}:void

配列のサイズを設定します。

s1, s0: 配列の新しい次元を指定するint値。s1は配列の第 1 次元、s0 は第 2 次元。

説明

配列のサイズは、配列内の要素数です。このメソッドを使用すると、配列のサイズを変更できます。配列のサイズを減らすと、新しいサイズを超えた要素がなくなります。配列のサイズを増やすと、新しい要素が要素のデータ型の既定値に初期化されます(0 または null)。配列のサイズを変更すると、Curl は配列の内部表現を再割り当てします (Array-2-of.underlying-FastArray)。


{value
    || Create a two-dimensional array of String.
    let my-array:{Array-2-of String} =
        {new {Array-2-of String}, 2, 3}

    || Change the dimensions of the array.
    {my-array.set-size 6, 9}

    || Declare two integer variables to hold the
    || size for each dimension.
    let x:int
    let y:int

    || Assign the return value from a call to size
    || to the integer variables.
    set (x, y) = {my-array.size}

    || Display the two integer values.
    {text The size is ({value x}, {value y}).}
}


size (メソッド)
public final inline {Array-2-of.size}:(s1:int, s0:int)

配列のサイズを返します。

戻り値

配列のサイズを示す 2 つの int 値。最初 (左側) の戻り値は、配列の第 1 次元です。2 つ目の (右側) の戻り値は、配列の第 2 次元です。


{value
    || Create a two-dimensional array of String.
    let my-array:{Array-2-of String} =
        {new {Array-2-of String}, 2, 3}

    || Assign the return value from a call to size
    || to integer variables holding its size.
    let (x:int, y:int) = {my-array.size}

    || Display the two integer values.
    {text The size is ({value x}, {value y}).}
}

注意事項

Array-2-of クラスでは、size はメソッドですがArray-of クラスでは、size はゲッターです。


to-Iterator (メソッド)
public {Array-2-of.to-Iterator}:{Iterator-of t}

配列の各要素を含む Iterator-of を返します。

戻り値

self 内の要素と同じパラメータ化データ型を持つ Iterator-of。つまり、self{Array-2-of int} の場合、このメソッドは {Iterator-of int} を返します。

説明

このメソッドは、(内部表現の順序を使用して) 要素の順序を保存します。Curl は、第 1 次元の各インデックスの要素を順に格納します。第 1 次元のインデックスの要素を格納する場合、Curl は第 2 次元の各インデックスの要素を順に格納します。たとえば、Curl では 2 x 3 配列の要素が以下のように格納されます。

(0,0), (0,1), (0,2), (1,0), (1,1), (1,2)


{value
    || Create a two-dimensional array of String.
    let my-array:{Array-2-of String} =
        {new {Array-2-of String}, 2, 3}

    || Fill the array with elements.
    set my-array[0, 0] = "Harry"
    set my-array[1, 0] = "Sally"
    set my-array[0, 1] = "Tom"
    set my-array[1, 1] = "Mary"
    set my-array[0, 2] = "John"
    set my-array[1, 2] = "Anne"

    || Create an Iterator-of from the set.
    let my-iterator:{Iterator-of String} =
        {my-array.to-Iterator}

    || Use a VBox to display the contents of my-iterator.
    || Iterate over the contents of my-iterator, adding
    || them to the VBox.  Then display the VBox.
    let message:VBox = {VBox}
    {for each-element:String in my-iterator do
        {message.add each-element}
    }
    message
}

注意事項

for コンテナ ループを使って同じ結果を得ることもできます。ただし、この反復処理メカニズムをオーバーライドすると、予期外の結果が生じる可能性があるので、可能な限り for ループを使用してください。