配列操作†
8 個の関数。
ARRAYSIZE†
書式†
ARRAYSIZE(var)
引数†
| Parameter | Description |
|---|---|
| var | 簡易配列(文字列)または汎用配列 |
戻り値†
成功時:要素数 失敗時:0
解説†
簡易配列、もしくは汎用配列の要素数を返す。
使用例†
_array = ('さくら','まゆら','ねここ') // 汎用配列を代入
ARRAYSIZE( _array ) // 要素数「3」を出力
互換性†
- YAYA: 初期リリースから利用可能
- AYA: バージョン 5.8 以降
関連項目†
ARRAYDEDUP†
書式†
ARRAYDEDUP(array)
引数†
| Parameter | Description |
|---|---|
| array | 汎用配列 |
戻り値†
重複要素を排除した汎用配列を返す。
解説†
同じとみなした要素は最初のものが残る。結果の並びは元の順ではなく、ハッシュのキーと同じ順になる。
Tc600-3以降では、要素の一致と並び順はハッシュのキーと同じ規則になった。
- 整数・実数・正規形の整数を表す文字列は、値が同じなら同じ要素とみなす(
1、1.0、"1"は同じ) - 数値 < 文字列 の順に並ぶ
- 配列やハッシュの要素は内容で比べる。同じ内容のハッシュは1つにまとまり、内容の違うハッシュは残る
- VOID 同士は同じ要素とみなす
型のそろった配列(整数だけ、実数だけ、文字列だけ)の結果は、それ以前と変わらない。
使用例†
ARRAYDEDUP((3, 1, 2, 1)) // 1,2,3
ARRAYDEDUP((10, "9", 9, "a", 1.0, 1, "1")) // 1.000000,9,10,a (Tc600-3以降)
互換性†
- YAYA: Tc568-1 以降
- Tc600-3: 型の混ざった配列で結果が並び方しだいになっていたのを修正し、ハッシュのキーと同じ規則で比べるようにした
関連項目†
ASEARCH†
書式†
ASEARCH(key, array)
引数†
| Parameter | Description |
|---|---|
| key | 検索するキー値(文字列) |
| array | 汎用配列(簡易配列は使用不可) |
戻り値†
成功時:最初に見つかった要素の順序番号(0始まり) 見つからない場合:-1
解説†
key と各要素を == と同じ規則で比べ、最初に一致した要素の位置を返す。
Tc600-3以降では、次の点が変わった。
- 要素がハッシュのときは内容で比べる(
keyにハッシュを渡すと、同じ内容のハッシュの要素が見つかる) keyと要素が両方とも VOID のときも一致とみなす(それまでは -1 だった)
使用例†
_array = ('さくら','まゆら','ねここ')
ASEARCH('まゆら', _array) // 1 を出力
互換性†
- YAYA: 初期リリースから利用可能
- AYA: バージョン 5.8 以降
- Tc600-3: ハッシュの要素を内容で比べるようにした。VOID 同士を一致とみなすようにした
関連項目†
ASEARCHEX†
書式†
ASEARCHEX(key, array)
引数†
| Parameter | Description |
|---|---|
| key | 検索対象の文字列値 |
| array | 汎用配列(簡易配列は使用不可) |
戻り値†
一致するすべての要素の順序番号(0始まり)を格納した汎用配列を返す。一致する要素がない場合は空の配列を返す。
解説†
汎用配列から、値が一致する要素をすべて検索する。
使用例†
_tea = ("鉄観音", "烏龍", "やぶきた", "烏龍", "ジャスミン")
ipod = ASEARCHEX("烏龍", _tea)
// ipod には (1,3) という汎用配列が格納される
互換性†
- YAYA: 初期リリースから利用可能
- AYA: バージョン 5.8 以降
関連項目†
ASORT†
書式†
ASORT(option, array)
引数†
| Parameter | Description |
|---|---|
| option | ソート動作をカンマ区切りで指定する文字列。比較型(string(デフォルト)・int・double・length)、順序(ascending(デフォルト)・descending)、大文字小文字の区別(case)、戻り値形式(index)を組み合わせて指定 |
| array | ソート対象の汎用配列(簡易配列は使用不可) |
戻り値†
ソートされた汎用配列を返す。エラー時または入力配列が空の場合は空の配列を返す。index オプションを指定した場合は、ソート後の各要素の元の配列における位置を示す配列を返す。
解説†
option は、比較型・順序・戻り値形式の3種類をカンマ区切りで並べて指定する。
- 比較型:
string(指定なしの場合の標準)、int、double、length。lengthはstringと一緒に使い、文字の内容ではなく文字の長さを対象に並べる('string,descending,length'のように書く) - 順序:
ascending(昇順。指定なしの場合の標準)、descending(降順) - 戻り値形式:
indexを指定すると、ソートした結果の配列そのものではなく、「ソート後の各位置が、ソート前の何番目の要素か」を示す配列を返す。たとえば'Z','G','A'を文字列昇順でソートすると、順番は A, G, Z になるので、整数の配列2,1,0が返る
比較型ごとに、各要素を次の値に変換して比べる。要素の型は見ないので、整数と文字列が混ざった配列も、指定した比較型で並べる。
| 比較型 | 比べる値 |
|---|---|
string |
要素を文字列にしたもの。辞書順に並べる。大文字小文字を区別しない(case を付けると区別する) |
length |
要素を文字列にしたものの長さ |
int |
要素を整数にしたもの |
double |
要素を実数にしたもの |
string で大文字小文字を区別しないときは、"A" と "a" のように大文字小文字だけが違う要素は同じ値とみなす。
_a = ('b', 'A', 'c', 'B', 'a')
ASORT('string', _a) // A,a,b,B,c (A と a、b と B の順は決まらない)
ASORT('string,case', _a) // A,B,a,b,c
同じ値とみなされた要素どうしの順番は保証されない(元の配列の順を保つとは限らない)。
要素が配列やハッシュのとき(Tc600-3以降)†
要素が配列やハッシュ(値の入れ子)でも並べられる。比べる値は次のようになる。
string/length: TOSTR と同じ文字列(配列は1,2、ハッシュはk=aの形)int/double: 常に 0
返り値の要素は、配列やハッシュのまま(入れ子のまま)返る。
_v = PARSEJSON('[[3,1],[1,2],"b",[1,10],5]')
ASORT('string', _v) // (1,10),(1,2),(3,1),5,"b"
文字列にして比べるので、(1,10) は (1,2) より前になる("1,10" と "1,2" の辞書順)。また int / double では配列やハッシュはすべて同じ値とみなされ、その順番は保証されない。ハッシュの特定のキーの値で並べたいときは、キーの値の配列を作って index オプションで並べ、その順に元の配列の要素を取り出す。
_list = PARSEJSON('[{"n":3,"s":"c"},{"n":1,"s":"a"},{"n":2,"s":"b"}]')
_keys = IARRAY()
foreach _list ; _e { _keys ,= _e["n"] }
_sorted = IARRAY()
foreach ASORT('int,index', _keys) ; _i { _sorted ,= _list[_i] }
// _sorted の "n" は 1,2,3 の順
使用例†
_array = ('BBBB','CCC','AA')
ASORT('string,ascending', _array) // "AA,BBBB,CCC" を出力
ASORT('string,descending,length', _array) // "BBBB,CCC,AA" を出力
互換性†
- YAYA: Tc540-1 以降
indexオプション: Tc545-1 以降
関連項目†
SETDELIM†
書式†
SETDELIM( array , delim )
引数†
| Parameter | Description |
|---|---|
| array | デリミタを設定する簡易配列変数 |
| delim | 設定するデリミタ文字列 |
戻り値†
なし
解説†
変数の標準デリミタ(簡易配列の区切り文字)を設定します。デフォルトのデリミタはカンマ(,)です。
注意: 両引数は関数に直接指定する必要があります。以下のような方法では正しく動作しません:
// 不正な使い方(動作しない)
_i = (var, "/")
SETDELIM(_i)
// 正しい使い方
SETDELIM(var, "/")
互換性†
- YAYA: 初期バージョンより対応
- AYA: 5.8以降
関連項目†
GETDELIM†
書式†
GETDELIM( var )
引数†
| Parameter | Description |
|---|---|
| var | デリミタを調べたい簡易配列変数 |
戻り値†
指定した変数に設定されているデリミタ文字列。
解説†
変数に設定されているデリミタ(簡易配列の区切り文字)を取得する関数。デフォルトのデリミタはカンマ(,)。
SETDELIMで変更されたデリミタを確認するために使用する。
互換性†
- YAYA: 初期バージョンから使用可能
- AYA: バージョン5.8以降
関連項目†
IARRAY†
書式†
IARRAY
IARRAY()
引数†
なし
戻り値†
空の汎用配列
解説†
空の汎用配列を返す。
主な用途は以下の2つ:
1. 配列の初期化
初期化せずに ,= で要素を追加すると、インデックス0に不要な空文字列要素が生成される。IARRAYで初期化することでこれを防ぐことができる。
2. 要素の削除
配列要素にIARRAYを代入することで、その要素を完全に削除し、後続の要素をシフトすることができる(空文字列を残さない)。空文字列を代入して消したつもりになると、要素の位置に空文字列が残り、要素数も減らない。ただし Tc603-1以降、その要素が配列やハッシュ(入れ子)のときは、削除されずに空の配列に置き換わる。入れ子の要素を削除するときは範囲指定で _a[1, 1] = IARRAY と書く。
要素を完全に削除すると、後ろの要素が前に詰められて位置が変わる。配列のインデックスの番号が変わってはいけない場合は、IARRAY を使わないこと。
使用例†
// 初期化なしの場合(望ましくない結果)
_myarray ,= "hoge"
_myarray ,= "hogehoge"
// 結果: ("","hoge","hogehoge")
// IARRAYで初期化した場合
_myarray = IARRAY
_myarray ,= "hoge"
_myarray ,= "hogehoge"
// 結果: ("hoge","hogehoge")
// 要素の削除
_myarray = ("hoge","hogehoge")
_myarray[0] = IARRAY
// 結果: ("hogehoge") — 要素が削除されてシフト
互換性†
- YAYA: 初期から利用可能
- AYA: 5.8以降