配列¶
概要¶
[ ] 演算子で配列要素にアクセスする。YAYAは2種類の配列をサポートする:簡易配列(コンマ区切り文字列を扱う)と汎用配列(混合型コレクション)。
簡易配列¶
コンマをデリミタとして文字列内で解釈する:
_a = "this,is,a,pen"
_a[1] // "is" を出力
カスタムデリミタ: インデックスの後に指定できる:
"This is a island."[2,"is"] // " a " を出力
ネストアクセス: デリミタを段ごとに変えられる:
_ar = "taro|male,ayame|female,hotaru|female"
_ar[2][1,"|"] // "female" を出力
代入: 元の変数の要素を変更できる:
_a[3] = "eraser" // 要素を置き換える
_m[5,"/"] = "daisen" // 必要に応じてデリミタで拡張する
SETDELIM() 関数でデフォルトデリミタをコンマ以外に変更できる。
汎用配列¶
カッコとコンマ記法で混合型の値を格納する:
i = (100,"test",-1.5)
単一要素の初期化 は IARRAY と組み合わせて行う:
i = (IARRAY,100)
要素操作:
- 追加:
i = (i,"add")またはi ,= ("add",123,0.0) - 削除:
i[2] = IARRAY - 挿入:
i = ("first",i)またはi[2] ,= "insertion"
演算: 配列とスカラー値の演算は要素ごとに適用される:
pref = ("gunnma","ohsaka")
pref += "-ken" // すべての要素に "-ken" が追加される
配列同士の演算はすべての組み合わせを生成する:
pref1 = ("gunma","osaka")
pref2 = ("-ken","-fu")
pref1 + pref2 // 4つの結果を生成
要素の比較: 配列同士を == で比べると、要素ごとに比べる。Tc600-3以降では、要素が両方とも VOID のときも等しいとみなす(それまでは偽だった)。
入れ子と多次元代入(Tc600-3以降)¶
配列の要素にハッシュを入れたり、ハッシュの値に配列を入れたりできる。読み出しは _a[1]["x"]、代入は _a[1]["x"] = 5 のように [ ] を続けて書く。
_a = (0, IHASH("x", 1), 2)
_a[1]["x"] // 1
_a[1]["x"] = 5 // 多次元代入
多次元代入では、途中の要素が文字列なら簡易配列として書き換える:
_a = ("p,q", "r")
_a[0][1] = "Q" // _a[0] は "p,Q"
ただし、汎用配列の中に汎用配列を直接入れる手段は無い。, 演算子も _a[1] = (8,9) も、配列を展開して差し込む。
詳細は ハッシュと値の入れ子 を参照。
範囲指定¶
両方の配列型で範囲インデックス [a,b] を使った取得・代入ができる:
name = ("さくら","せりこ","奈留","まゆら")
i = name[1,3] // 要素1〜3
name[3,4] = "奎子"
animal[0,2,"!"] // デリミタ付き範囲
並列出力¶
parallel キーワードで配列要素を別々の出力候補に変換する:
foo { parallel ("A","B","C") } // A、B、Cのいずれかを出力
void キーワードは出力候補を生成せずに結果を破棄する。