Contents
連想配列とは、自動的に割り当てられる数字をキーとして持つかわりに、自由に任意の文字列を割り振ることができる配列のことです。添え字に番号の変わりに名前をつけることでわかりやすく管理することができます。
- 構文
- // 連想配列の宣言
HASHTBL 変数
// 大文字小文字を区別する(デフォルトは区別しない)
HASHTBL 変数 = HASH_CASECARE
// 順列で読出す時にキーはソートされている
HASHTBL 変数 = HASH_SORT
// キーにデータを代入
変数[キー] = データ
// キーが存在するか
変数[キー, HASH_EXISTS]
// キーを削除
変数[キー, HASH_REMOVE]
// 指定した順列番号のキーを取得
変数[順列番号, HASH_KEY]
// 指定した順列番号のデータを取得
変数[順列番号, HASH_VAL]
// 連想配列を削除
変数 = HASH_REMOVEALL
- 引数
- 戻り値
プログラム実行例
無線LANのインターフェイス情報を取得
HASHTBL LAN
str = SPLIT(DOSCMD("netsh wlan show interface"), "<#CR>")
FOR n = 0 TO UBound(str)
IFB POS(":", str[n]) THEN
arr = SPLIT(str[n], ":")
LAN[TRIM(arr[0])] = TRIM(arr[1])
ENDIF
NEXT
DIM items[] = "名前", "説明", "GUID", "物理アドレス", "状態", + _
"SSID", "BSSID", "ネットワークの種類", "無線の種類", "認証", + _
"暗号", "接続モード", "チャネル", "受信速度 (Mbps)", "送信速度 (Mbps)", + _
"シグナル", "プロファイル", "ホストされたネットワークの状態"
FOR item IN items
PRINT item + ":" + LAN[item]
NEXT
//////////////////////////////////////////////////
// 【引数】
// 配列 : 上限値を求める配列
// 【戻値】
// 配列の上限値
//////////////////////////////////////////////////
FUNCTION UBound(array[])
RESULT = RESIZE(array)
FEND
- 結果
名前:ワイヤレス ネットワーク接続 説明:Intel(R) WiFi Link 1000 BGN GUID:*** 物理アドレス:74 状態:接続されました SSID:*** BSSID:18 ネットワークの種類:インフラストラクチャ 無線の種類:802.11n 認証:WPA2-パーソナル 暗号:CCMP 接続モード:自動接続 チャネル:10 受信速度 (Mbps):72 送信速度 (Mbps):72 シグナル:80% プロファイル:*** ホストされたネットワークの状態:利用不可
HASHTBL fruits
fruits["apple"] = "りんご"
fruits["grape"] = "ぶどう"
fruits["cherry"] = "さくらんぼ"
fruits["peach"] = "もも"
fruits["banana"] = "バナナ"
FOR item IN fruits
PRINT item + ":" + fruits[item]
NEXT
- 結果
apple:りんご grape:ぶどう cherry:さくらんぼ peach:もも banana:バナナ
連想配列をキーでソートする
キーをソートするには宣言時に「HASH_SORT」を指定します。
HASHTBL fruits = HASH_SORT
fruits["apple"] = "りんご"
fruits["grape"] = "ぶどう"
fruits["cherry"] = "さくらんぼ"
fruits["peach"] = "もも"
fruits["banana"] = "バナナ"
FOR item IN fruits
PRINT item + ":" + fruits[item]
NEXT
- 結果
apple:りんご banana:バナナ cherry:さくらんぼ grape:ぶどう peach:もも
連想配列のキーの大文字小文字の区別をする
キーの大文字と小文字を区別するには宣言時に「HASH_CASECARE」を指定します。指定したキーの大文字と小文字を区別するので、「PRINT fruits["Apple"]」ではりんごは出力されません。
HASHTBL fruits = HASH_CASECARE
fruits["apple"] = "りんご"
fruits["grape"] = "ぶどう"
fruits["cherry"] = "さくらんぼ"
fruits["peach"] = "もも"
fruits["banana"] = "バナナ"
PRINT fruits["Apple"]
PRINT fruits["grape"]
- 結果
ぶどう
連想配列のキーでソートし、かつ、大文字小文字を区別する
キーの大文字と小文字を区別し、さらにソートするには宣言時に「HASH_SORT OR HASH_CASECARE」を指定します。
HASHTBL fruits = HASH_SORT OR HASH_CASECARE
fruits["apple"] = "りんご"
fruits["grape"] = "ぶどう"
fruits["cherry"] = "さくらんぼ"
fruits["peach"] = "もも"
fruits["banana"] = "バナナ"
PRINT fruits["Apple"]
PRINT fruits["grape"]
PRINT
FOR item IN fruits
PRINT item + ":" + fruits[item]
NEXT
- 結果
ぶどう apple:りんご banana:バナナ cherry:さくらんぼ grape:ぶどう peach:もも
連想配列のキーが存在するか調べる
HASH_EXISTSでキーが存在するかどうかを調べることができます。以下の例の場合apple(りんご)は宣言されているのでTrueを返しますが、pear(梨)は宣言されていないのでFalseが返ります。
HASHTBL fruits
fruits["apple"] = "りんご"
fruits["grape"] = "ぶどう"
fruits["cherry"] = "さくらんぼ"
fruits["peach"] = "もも"
fruits["banana"] = "バナナ"
PRINT "apple:" + fruits["apple", HASH_EXISTS]
PRINT "pear:" + fruits["pear", HASH_EXISTS]
- 結果
apple:True pear:False
連想配列のキーを削除する
キーを削除するにはHASH_REMOVEを使います。キーを削除できた場合Trueが返ります。
HASHTBL fruits
fruits["apple"] = "りんご"
fruits["grape"] = "ぶどう"
fruits["cherry"] = "さくらんぼ"
fruits["peach"] = "もも"
fruits["banana"] = "バナナ"
PRINT fruits["apple", HASH_REMOVE]
PRINT "apple:" + fruits["apple", HASH_EXISTS]
- 結果
True apple:False
順列番号でキーを取得するにはHASH_KEY、値を取得するにはHASH_VALを指定します。連想配列の最大要素数は「LENGTH(変数) - 1」で取得できます。
HASHTBL fruits
fruits["apple"] = "りんご"
fruits["grape"] = "ぶどう"
fruits["cherry"] = "さくらんぼ"
fruits["peach"] = "もも"
fruits["banana"] = "バナナ"
FOR n = 0 TO LENGTH(fruits) - 1
PRINT fruits[n, HASH_KEY] + ":" + fruits[n, HASH_VAL]
NEXT
- 結果
apple:りんご grape:ぶどう cherry:さくらんぼ peach:もも banana:バナナ
連想配列を削除するには「HASH_REMOVEALL」を使います。
HASHTBL fruits
fruits["apple"] = "りんご"
fruits["grape"] = "ぶどう"
fruits["cherry"] = "さくらんぼ"
fruits["peach"] = "もも"
fruits["banana"] = "バナナ"
PRINT "HASH_REMOVEALL実行前"
PRINT fruits["apple"]
PRINT
fruits = HASH_REMOVEALL
PRINT "HASH_REMOVEALL実行後"
PRINT fruits["apple"]
- 結果
HASH_REMOVEALL実行前 りんご HASH_REMOVEALL実行後
連想配列のキーと値を入れ替える
HASHTBL fruits
fruits["apple"] = "りんご"
fruits["grape"] = "ぶどう"
fruits["cherry"] = "さくらんぼ"
fruits["peach"] = "もも"
fruits["banana"] = "バナナ"
hashInvert(fruits)
FOR n = 0 TO LENGTH(fruits) - 1
PRINT fruits[n, HASH_KEY] + ":" + fruits[n, HASH_VAL]
NEXT
//////////////////////////////////////////////////
// 【引数】
// hash : キーと値を入れ替える連想配列(参照引数)
// 【戻値】
//
//////////////////////////////////////////////////
PROCEDURE hashInvert(Var hash[])
HASHTBL tmp
DIM cnt = LENGTH(hash)
FOR n = 0 TO cnt - 1
tmp[hash[n, HASH_VAL]] = hash[n, HASH_KEY]
NEXT
hash = HASH_REMOVEALL
FOR n = 0 TO cnt - 1
hash[tmp[n, HASH_KEY]] = tmp[n, HASH_VAL]
NEXT
FEND
- 結果
りんご:apple ぶどう:grape さくらんぼ:cherry もも:peach バナナ:banana
関連記事
- CALCARRAY (スクリプト関数)
- 配列の合計値・最小値・最大値・平均値を求めます。
- GETALLWIN (スクリプト関数)
- 全ウィンドウのIDを取得します。
- JOIN (スクリプト関数)
- 引数に指定した配列を結合し文字列を返します。
- POPUPMENU (スクリプト関数)
- ポップアップメニューを表示し、引数に指定した配列の中から選択された項目の要素番号を取得します。選択された項目を取得したい場合は、POPUPMENUの戻値を引数に指定した配列の要素番号として指定します。
- SLICE (スクリプト関数)
- SLICE関数は、配列の中を指定範囲の配列で返す関数です。第一引数に配列を指定し、第二引数に開始位置、第三引数に終了位置を指定します。第二・第三引数は省略可能で、省略した場合は配列全体を返します。戻値はsafearray型です。
- UBound
- 配列の最大インデックスを返します。
- inArray
- divisors
- 引数に指定した数値の約数をリストを配列で返します。
- bubbleSort
- 引数に指定した配列をバブルソートで並び替えます。
- shakerSort
- シェーカーソートは、ソートのアルゴリズムの一つです。バブルソートを改良したもの。双方向バブルソート、改良交換法とも言われます。バブルソートではスキャンを一方向にしか行わないのに対し、シェーカーソートでは交互に二方向に行います。
- gnomeSort
- ノームソートはソートアルゴリズムの一つです。挿入ソートに似ているが、要素の移動は挿入ではなくバブルソートのような一連の交換で行います。
- heapSort
- 引数に指定された配列をヒープソートで並び替えます。
- oddEvenSort
- 奇偶転置ソートは、ソートのアルゴリズムの一つで、バブルソートを改良したもの。バブルソートではスキャンを一方向に順次行うのに対し、奇偶転置ソートでは組ごとに行います。
- shearSort
- シェアソートはソートアルゴリズムの一つで、データを長方形に並べた上で各行・各列ごとにソートを行ないます。
- QSORT (スクリプト関数)
- QSORT関数は、配列の中身をソートする関数です。戻値はありません。昇順・降順・UNICODE文字比較 昇順・UNICODE文字比較 降順・自然順ソート 昇順・自然順ソート 降順のいずれかを指定することができます。
- RESIZE (スクリプト関数)
- 配列のサイズを変更します。第二引数を省略した場合はサイズを取得します。
- SETCLEAR (スクリプト関数)
- 配列のすべての要素を任意の値で埋めます。
- SHIFTARRAY (スクリプト関数)
- 配列を指定した値だけシフトします。プラス値で後方、マイナス値で前方にシフトします。
- SPLIT (スクリプト関数)
- SPLIT関数は、引数に指定された文字列を区切文字列で区切り配列に格納します。区切文字列を省略した場合、スペースが区切文字列となります。戻値は配列でsafearray型です。
- FOR-IN-NEXT
- 配列やコレクションなどのグループの各要素に対して繰り返し処理を行います。
- combSort
- コムソートではソートの初期段階では離れた要素を比較交換します。そして徐々に2つの要素間の距離を縮めて、最後に直接隣接している要素どうしの比較交換を行います。
- arraySearch
- 配列の中から指定した要素が見つかった場合、その要素がある最初のインデックスを返します。
- arrayReverse
- 引数に指定した配列を逆順にして返します。
- selectionSort
- 選択ソートは、ソートのアルゴリズムの一つ。配列された要素から、最大値やまたは最小値を探索し配列最後の要素と入れ替えを行うことでソートします。
- insertionSort
- 挿入ソートは、ソートのアルゴリズムの一つ。整列してある配列に追加要素を適切な場所に挿入します。
- shellSort
- シェルソートは挿入ソートが改良された整列アルゴリズムです。リストにおいてあらかじめ離れている要素を交換しておき、最終的に挿入ソートを実行します。
- mergeSort
- マージソートは整列されていないリストを2つのリストに分割して、それぞれを整列させた後、それらをマージして整列済みのひとつのリストを作ります。
- quickSort
- 問題を小さな部分問題に分割していく分割統治法を利用した手法で、データから適当に基準値を決めこれより大きいグループと小さいグループに分けるという手順を、分けた小さなグループに対しても再帰的に繰り返していきます。
- bogoSort
- 要素をランダムに並べ替えることで偶発的な一致を試みる整列アルゴリズムです。