コンテンツにスキップ

配列

概要

[ ] 演算子で配列要素にアクセスする。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 キーワードは出力候補を生成せずに結果を破棄する。