コレクション・クラスの利用

Curlの持つコレクション・クラスについて、説明します。

配列(FastArray-of)

Curlで配列を扱うには、FastArray-ofを利用します。FastArray-ofの宣言時に引数として、配列の型を定義します。また、配列は最大サイズを宣言時点で指定する必要があります。

def a = {new {FastArray-of int}, max-size = 3}

または

def a = {{FastArray-of int} max-size = 3} || newは省略可

{a.append 1} || 追加
{a.append 2} || 追加
{a.append 3} || 追加

{dump a[0], a[1], a[2], a.size}

データを追加する際は、appendメソッドを利用し、値を参照する場合は、変数名[インデックス]でアクセスできます。インデックスは0から始まります。

リスト(Array-of)

Javaのようなリスト(List、ArrayList)を扱うには、Array-ofを利用します。これはFastArray-ofのように、最大サイズは指定する必要がありません。 

def a = {new {Array-of int}, 1, 2, 3} || 初期値も設定

または

def a = {{Array-of int} 1, 2, 3} || newは省略可

{dump a[0], a[1], a[2], a.size}

ハッシュテーブル(連想配列)(HashTable-of)

Javaのハッシュマップ(Map、HashMap)のような連想配列を扱うには、HashTable-ofを利用します。これはキーと値をもちますので、引数にキーの型と値の型を指定する必要があります。値を参照するには、変数名[“キー名”]でアクセスできます。値をセットするには、setメソッドを利用します。

def h = {new {HashTable-of String, int}, “key1”, 1, “key2”, 2, “key3”, 3}

または

def h = {{HashTable-of String, int} “key1”, 1, “key2”, 2, “key3”, 3} || newは省略可

{h.set “key4”, 4}

{dump h[“key1”], h[“key2”], h[“key3”], h[“key4”], h.size}

コンテナループ

上記のような配列やリスト・連想配列をFor文で繰り返して、値を取得するには以下のようにin句を利用します。(連想配列の場合は、key句でキーの値も取得できます。)

|| 配列・リスト
{for v in a do
    || vに値
    {dump v}
}

|| 連想配列
{for v key k in h do
    || kにキー値
    || vに値

    {dump k, v}
}

タプル

バージョン6.0からタプルがサポートされました。これはPython等にサポートされている編集不可のコレクションクラスです。これを利用するには、Tuple2-ofTuple3-ofTuple4-ofTuple5-ofクラスを使います。具体的な例を以下に記載します。

|| Tuple2-ofの例
def t2 = {{Tuple2-of int, String} 
             1, “hoge.”
         }
{output t2[0], t2[1]} || アクセス方法は配列と同様

|| Tuple5-ofの例
def t5 = {{Tuple5-of int, int, String, String, bool}
             1, 100, “hoge”, “foo”, true
         }
{for v in t5 do
    {output v} || コンテナループも利用可能
}

メモ

ちなみにFastArray-ofからArray-ofを生成するには、Array-ofのfrom-FastArrayコンストラクタを利用し、逆にArray-ofからFastArray-ofを生成するには、underlying-FastArrayアクセサを利用します。