連想配列とは、自動的に割り当てられる数字をキーとして持つかわりに、自由に任意の文字列を割り振ることができる配列のことです。添え字に番号の代わりに名前をつけることでわかりやすく管理することができます。
- 構文
- // 連想配列の宣言
HASHTBL 変数
// 大文字小文字を区別する(デフォルトは区別しない)
HASHTBL 変数 = HASH_CASECARE
// 順列で読出す時にキーはソートされている
HASHTBL 変数 = HASH_SORT
// キーにデータを代入
変数[キー] = データ
// キーが存在するか
変数[キー, HASH_EXISTS]
// キーを削除
変数[キー, HASH_REMOVE]
// 指定した順列番号のキーを取得
変数[順列番号, HASH_KEY]
// 指定した順列番号のデータを取得
変数[順列番号, HASH_VAL]
// 連想配列を削除
変数 = HASH_REMOVEALL
削除HASH_REMOVEは必要無くとも変数で受ける必要あり
- 引数
- 戻り値
連想配列とは
連想配列とはキーと値をペアに持つデータ構造のことで、キーを使用して値を取得することができます。
配列との違い
配列・連想配列ともに複数の値を格納できるデータ構造ですが、値を管理するための名前の付け方に違いがあります。
配列では0から始まる連番で値を管理する添え字を使うのに対し、連想配列では値それぞれに固有の名前をつけて管理することができます。この固有の名前のことをキーといい、その値が何を表しているのか理解しやすくなります。
以下は、各教科の点数を配列で書いたプログラムです。添え字の0から順に、国語・社会・数学・理科・英語の点数を入れて管理しています。
次に、以下は連想配列で書いた場合のプログラムです。連想配列のキー名を科目にすることでどの科目が何点なのかがわかりやすくなります。
配列で使えたCALCARRAY関数 (スクリプト関数)が連想配列では使えないというデメリットもありますが、要素をループをすることで合計点・平均点も求めることができます。
要素の追加
要素を追加するには以下のように記述し、要素を追加すると順列番号は0から順に1ずつ加算されていきます。
配列との違いに出したプログラムでも要素の追加について記述していますが、以下のように追加する要素を記述していきます。
すでに存在するキー名で追加した場合は、あとに書いた値で上書きされます。以下は数学の値が85から75に更新されます。
要素の存在有無の確認
要素が存在するか確認するには以下のように記述します。存在する場合はTrue、存在しない場合にはFalseが返ります。
以下は要素が存在するか確認するプログラムです。score[理科]は存在するのでTrue、score[音楽]は存在しないのでFalseが返ります。
- 結果
HASH_EXISTSは戻り値を変数で受ける必要があり、以下のような書き方はSyntaxErrorが発生します。
大抵の場合は指定したキー名が存在するかしないかの条件分岐で以下のどちらかの書き方になります。
キーを削除
連想配列のキーを削除するには以下のように記述します。キーを削除できた場合True、削除できなかった(存在しなかったなどの)場合はFalseが返ります。
以下はキー名が理科の要素を削除するプログラムです。1回目は要素の削除に成功するのでTrue、2回目はすでに削除された要素なのでFalseを返します。
- 結果
キーを削除すると削除したキー以降の順列番号が詰められ連番を維持します。以下はキー名が理科の要素を削除したので順列番号が3以降の要素が詰められ、英語の順列番号が3になります。
- 結果
HASH_REMOVEもHASH_EXISTSと同様変数で受ける必要があり、以下のように記述するとエラーが発生します。
結果を変数に代入するか画面やログに出力する必要があります。
削除のみ行いたい場合は、FUKIDASI関数で表示することでエラーを回避することができます。
順列番号からキー名を取得
順列番号からキー名を取得するには以下のように記述します。
順列番号が2・LENGTH(score)-1のキー名を取得します。
順列番号は0からなので2は3番目の数学を、LENGTH(score)-1は後ろから1番目の英語を返します。
- 結果
順列番号からデータを取得
順列番号からデータを取得するには以下のように記述します。
順列番号が2・LENGTH(score)-1の値を取得します。
順列番号が2はキー名が数学の値である85、LENGTH(score)-1はキー名が英語の値である79を返します。
- 結果
連想配列をキー名でソートする
連想配列をキー名で昇順ソートするには連想配列宣言時にHASH_SORTを指定します。
- 結果
以下はFOR-IN-NEXTで書いた場合。
- 結果
降順ソートは指定できないので、昇順ソートした配列をFOR文で後ろから要素を取得していきます。
- 結果
連想配列のキーの大文字小文字の区別をする
キーの大文字と小文字を区別するには宣言時にHASH_CASECAREを指定します。指定したキーの大文字と小文字を区別するので、PRINT fruits["Apple"]ではりんごは出力されません。
- 結果
連想配列のキーでソートし、かつ、大文字小文字を区別する
キーの大文字と小文字を区別し、さらにソートするには宣言時にHASH_SORT OR HASH_CASECAREを指定します。
- 結果
連想配列のキー名と値を入れ替える
連想配列関数 (自作関数)を使い連想配列のキー名と値を入れ替えます。
- 結果
関連記事
- CALCARRAY関数 (スクリプト関数)
- 配列データを計算します。
- GETALLWIN関数 (スクリプト関数)
- 全ウィンドウのIDを取得します。
- GETOLEITEM関数 (スクリプト関数)
- コレクションを取得します。
- JOIN関数 (スクリプト関数)
- 配列の中身を区切り文字で結合し、文字列として返します。
- QSORT関数 (スクリプト関数)
- 配列の中身をソートします。
- SETCLEAR関数 (スクリプト関数)
- 配列を指定された値で埋めます。
- SHIFTARRAY関数 (スクリプト関数)
- 配列データをシフトします。
- divisors関数 (自作関数)
- 引数に指定した数値の約数のリストを返します。
- LENGTH関数 (スクリプト関数)
- 文字数もしくは配列サイズを返します。
- POPUPMENU関数 (スクリプト関数)
- ポップアップメニューを表示します。
