CodeZine(コードジン)

特集ページ一覧

ここがポイント!Curlプログラミング
コレクション(配列・ハッシュテーブル・セット)の文法

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2010/01/26 14:00

 数多くの言語と同じようにCurlにもコレクションが用意されています。配列(リスト)、ハッシュテーブル(連想配列)、セットについて見ていきましょう。コレクションを扱いやすくするメソッドも提供されています。

目次

はじめに

 今回は、Curl言語のコレクションについて説明します。コレクションは、同じ型のデータを集めたものです。各要素データの持ち方により、「配列」「ハッシュテーブル」「セット」の3種類がCurl言語により用意されています。これらの使い方について見ていきましょう。

配列

 配列は、同じ型の変数を複数保持するリストです。各要素にアクセスするには、0から始まる保持順番(インデックス)を使用します。配列には機能によっていくつか種類があります。最も高機能なのは、Array-of クラスです。

let 変数:{Array-of 型} = {{Array-of 型} 要素0, 要素1, ...}

 Array-of は、パラメータ化クラスになっています。そのために、型の指定は、{ } で囲む必要があります。新しいインスタンスを生成する場合は、内側の{ } が型を指定し、外側の { } がインスタンスの生成を表します。new を使った構文の方が意味は分かりやすいですね。

let 変数:{Array-of 型} = {new {Array-of 型}, 要素0, 要素1, ...}

 型を指定することにより、その型だけを含むことができる配列が生成できます。すべての型を要素に含めるようにしたい場合は、{Array-of any} を使います。null値をとるような型指定が必要な場合は、#演算子を使って型指定をします。要素の型をnull値または文字列型に指定したい場合は、以下のようになります。

let string-array:{Array-of #String} = {{Array-of #String}}

 具体的なサンプルコードを見てみましょう。配列に初期値として文字列 a、b、c を設定します。そして、各要素の文字列を連結した文字列を表示します。

コード1
{curl 7.0 applet}
{curl-file-attributes character-encoding = "shift-jis"}

{value
    let array:{Array-of String} = {{Array-of String} "a", "b", "c"}
    {array.get 0} & {array.get 1} & {array.get 2}
}

 実行結果は文字列 abc が表示されます。

 指定した配列の要素にアクセスするために、[ ]を使った表記が利用できます。同じプログラムをgetメソッドの代わりに [ ] で書いてみます。

コード2
{curl 7.0 applet}
{curl-file-attributes character-encoding = "shift-jis"}

{value
    let array:{Array-of String} = {{Array-of String} "a", "b", "c"}
    array[0] & array[1] & array[2]
}

 Array-of のデフォルトコンストラクタで引数を指定しない場合は、要素がない状態(要素数が0)で生成されます。インスタンス生成後、要素を追加したい場合は、最後に追加する場合は append メソッド、追加する位置を index値で指定して挿入する場合は insert メソッドを使います。

コード3
{curl 7.0 applet}
{curl-file-attributes character-encoding = "shift-jis"}

{value
    let array:{Array-of String} = {{Array-of String} "b"}
    {array.insert "a", 0}
    {array.append "c"}
    array[0] & array[1] & array[2]
}

 実行結果は先ほどと同じ、文字列 abc が表示されます。

 要素数を変えずに、値を変更したい場合、set メソッドもしくは setコマンドと [ ] で記述できます。

コード4
{curl 7.0 applet}
{curl-file-attributes character-encoding = "shift-jis"}

{value
    let array:{Array-of String} = {{Array-of String}}
    {array.append "a"}
    {array.append "b"}
    {array.append "c"}

    {array.set 1, "x"}
    set array[2] = "y"
    array[0] & array[1] & array[2]
}

 実行結果は、文字列 axy です。

 要素を削除したい場合は、remove メソッドを使います。

コード5
{curl 7.0 applet}
{curl-file-attributes character-encoding = "shift-jis"}

{value
    let array:{Array-of String} = {{Array-of String} "a", "b", "c"}
    {array.remove 1}
    array[0] & array[1]
}

 実行結果は、文字列 ac です。このようにインデックス値が1の要素を削除した場合は、要素数が2つになりますから、array[0] と array[1] のみが存在します。array[2] のように存在しない要素を指定すると、以下のエラーが発生します。

<エラー> - このアプレットをロード中にエラーが発生しました。 
ArrayBoundsException: 配列インデックスが境界外です。

 Array-of の他に、機能を絞って高速に動作する FastArray-of があります。FastArary-of は、最大要素数を予め指定して使う必要があります。また、一度設定したら要素数や値を変更できない ReadOnlyArray-of があります。

表1・Array-ofの主なプロパティ
プロパティ 内容
element-type 要素の型
empty? 要素が空か否か
size 要素の数
表2・Array-ofの主なメソッド
メソッド 内容
append 配列の最後に要素を追加する
clear 配列の要素を全て削除する
find 配列の最初に一致した要素のインデックスを返す
get 指定したインデックスの要素を返す
get-if-exists 指定したインデックスの要素があるか否かと値を返す
in-bounds? 指定したインデックス値が有効な範囲か否かを返す
insert 指定したインデックス位置に要素を挿入する
pop 配列の最後から要素を削除して返す
push 配列の最後に要素を追加する
remove 指定インデックス位置の1つまたは複数の要素を削除する
set 指定インデックス位置の要素を設定する
sort 要素を並び替える
splice 指定インデックスの位置に、複数要素の挿入を行う

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

あなたにオススメ

著者プロフィール

  • 久保田 一郎(クボタ イチロウ)

    財団法人日本自動車研究所電算システムGr所属。Macintosh HyperCardとOracleを使った業務システムの開発から始まって、4D、Java、AIRを経由してCurl に到達。

バックナンバー

連載:知っておきたいCurl文法の要点
All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5