配列操作 - stuncloud/UWSCR GitHub Wiki
JOIN
対応バージョン: 0.3.0
配列内の要素を文字列として結合します
文字列 = join(配列, [区切り文字, 空文字フラグ, 開始, 終了])
| 変数名 | 型 | 種別 | 説明 | 
|---|---|---|---|
| 配列 | 配列 | 必須 | 配列変数 | 
| 区切り文字 | 文字列 | 省略可 | 結合時の区切り文字 (省略時は半角スペース) | 
| 空文字フラグ | bool | 省略可 | FALSE: 空文字も結合する (デフォルト) | 
| TRUE: 空文字は除外 | |||
| 開始 | 数値 | 省略可 | どの要素から結合を開始するか (省略時は0) | 
| 終了 | 数値 | 省略可 | どの要素まで結合するか (省略時は配列長-1) | 
arr = ["foo", "bar", "baz", "qux"]
print join(arr) // foo bar baz qux
print join(arr, "+") // foo+bar+baz+qux
print join(arr, "+", FALSE, 1, 2) // bar+baz
// 空文字フラグ
print join(["hoge", "","fuga"], "&", FALSE) // hoge&&fuga
print join(["hoge", "","fuga"], "&", TRUE) // hoge&fuga
QSORT
対応バージョン: 0.8.0
配列内の要素を並び替えます
(あらゆる型を文字列扱いでソートします)
UWSCとはソート結果が異なります
qsort(var キー配列, ソート順=QSRT_A, var 配列, ...)
| 変数名 | 型 | 種別 | 説明 | 
|---|---|---|---|
| キー配列 | 配列 | 必須 | ソートする配列 | 
| ソート順 | 定数 | 省略可 | ソート順を示す定数 | 
| QSRT_A: 昇順 (デフォルト) | |||
| QSRT_D: 降順 | |||
| QSRT_UNICODEA: UNICODE文字列順 昇順 | |||
| QSRT_UNICODED: UNICODE文字列順 降順 | |||
| QSRT_NATURALA: 数値順 昇順 | |||
| QSRT_NATURALD: 数値順 降順 | |||
| 配列 | 配列 | 省略可 | キー配列のソートに連動してソートされる配列 | 
| キー配列よりサイズの小さい配列を渡すとソート前にEMPTYで埋められます | |||
| 8つまで指定可能 | 
// 連動ソート
// キー配列を並び替え、それと同じように別の配列も並び替えます
key  = [5,2,1,4,3]
arr1 = ["お","い","あ","え","う"]
arr2 = ["お","い","あ","え","う", "か"] // 余分はソート対象外、この場合「か」は位置が変更されない
arr3 = ["お","い","あ","え"] // 不足の場合末尾にEMPTYが追加されてからソート
qsort(key, QSRT_A, arr1, arr2, arr3)
print key  // [1, 2, 3, 4, 5]
print arr1 // [あ, い, う, え, お]
print arr2 // [あ, い, う, え, お, か]
print arr3 // [あ, い, , え, お]
qsort(key, QSRT_D, arr1, arr2, arr3)
print key  // [5, 4, 3, 2, 1]
print arr1 // [お, え, う, い, あ]
print arr2 // [お, え, う, い, あ, か]
print arr3 // [お, え, , い, あ]
REVERSE
対応バージョン: 0.8.0
配列の順序を反転させます
reverse(var 配列)
| 変数名 | 型 | 種別 | 説明 | 
|---|---|---|---|
| 配列 | 配列 | 参照渡し | 順序を反転させる配列 | 
arr = [1,2,3]
print arr // [1,2,3]
reverse(arr)
print arr // [3,2,1]
RESIZE
対応バージョン: 0.8.0
配列のサイズを変更し、その最大インデックス値を得ます
最大インデックス値 = resize(var 配列, インデックス値=EMPTY, 初期値=EMPTY)
| 変数名 | 型 | 種別 | 説明 | 
|---|---|---|---|
| 配列 | 配列 | 参照渡し | サイズを変更する配列 | 
| インデックス値 | 数値 | 省略可 | 指定値 + 1 のサイズに変更される | 
| 省略時は変更なし | |||
| マイナス指定時はサイズ0配列になる | |||
| 初期値 | 値 | 省略可 | 元より大きなサイズに変更した際に埋める値 | 
| 最大インデックス値 | 数値 | 戻り値 | サイズ変更後の最大インデックス値 | 
arr = [1,2,3]
// サイズ指定なしの場合は配列に変更なし
print resize(arr) // 2
print length(arr) // 3
// サイズ指定
print resize(arr, 3) // 3
print length(arr) // 4
// マイナス指定でサイズ0になる
print resize(arr, -1) // -1
print length(arr) // 0
// サイズ変更+初期値指定
arr = []
print resize(arr, 2, "a") // 2
print length(arr) // 3
print arr // [a, a, a]
SLICE
対応バージョン: 0.8.0
配列から新たな配列を切り出します
新配列 = slice(元配列, 開始=0, 終了=EMPTY)
| 変数名 | 型 | 種別 | 説明 | 
|---|---|---|---|
| 元配列 | 配列 | 必須 | 切り出す元となる配列 (この配列の状態は変化しない) | 
| 開始 | 数値 | 省略可 | 切り出し開始位置 (インデックス) ※負の数は0扱い | 
| 終了 | 数値 | 省略可 | 切り出し終了位置 (インデックス) ※負の数は0扱い | 
| 新配列 | 配列 | 戻り値 | 切り出された配列 | 
// 開始と終了が未指定の場合は配列がそのまま複製される
base = [1,2,3,4,5]
new = slice(base)
print new // [1, 2, 3, 4, 5]
print slice(base, 2) // [3, 4, 5]
print slice(base, , 2) // [1, 2, 3]
print slice(base, 1, 3) // [2, 3, 4]
// 範囲外が指定されたら空配列が返る
print slice(base, 5) // []
SPLIT
対応バージョン: 0.8.0
文字列を区切り文字で分割し配列にします
配列 = slice(文字列, 区切り文字=" ", 空文字フラグ=FALSE, 数値フラグ=FALSE, CSVフラグ=FALSE)
| 変数名 | 型 | 種別 | 説明 | 
|---|---|---|---|
| 文字列 | 文字列 | 必須 | 分割する文字列 | 
| 区切り文字 | 文字列 | 省略可 | 区切り文字、省略時は半角スペース | 
| CSVフラグ有効時は最初の一文字のみ使用される | |||
| 空文字フラグ | 真偽値 | 省略可 | FALSE: 空文字を含める (デフォルト) | 
| TRUE: 空文字を含めない | |||
| 数値フラグ | 真偽値 | 省略可 | FALSE: 数値変換を行わない (デフォルト) | 
| TRUE: 数値に変換する、変換できない場合は空文字にする | |||
| CSVフラグ | 真偽値 | 省略可 | FALSE: 通常の分割を行う (デフォルト) | 
| TRUE: CSVとして分割、空文字と数値のフラグは無視される | |||
| 配列 | 配列 | 戻り値 | 分割された配列 | 
print SPLIT("a b c") // [a, b, c]
// 空文字フラグ
print split("a,,b,,c", ",", FALSE) // [a, , b, , c]
print split("a,,b,,c", ",", TRUE) // [a, b, c]
// 数値フラグ
print split("1,2,f,4,5", ",", FALSE, FALSE) // [1, 2, f, 4, 5]
print split("1,2,f,4,5", ",", FALSE, TRUE) // [1, 2, , 4, 5]
// 空文字フラグと組み合わせると数値以外を排除できる
print split("1,2,f,4,5", ",", TRUE, TRUE) // [1, 2, 4, 5]
// 空文字で分割した場合
print split("12345", "", FALSE) // [, 1, 2, 3, 4, 5, ]
print split("12345", "", TRUE)  // [1, 2, 3, 4, 5]
// CSVフラグ
// , で区切られる
print split('a,b,"c,d",e', ",", , , FALSE) // [a, b, "c, d", e]
// "" 内を文字列扱いとし中の , では区切らない
print split('a,b,"c,d",e', ",", , , TRUE)  // [a, b, c,d, e]
CALCARRAY
対応バージョン: 0.8.0
配列内の数値で計算を行います
結果 = calcarray(配列, 計算方法, 開始=0, 終了=EMPTY)
| 変数名 | 型 | 種別 | 説明 | 
|---|---|---|---|
| 配列 | 配列 | 必須 | 数値を含む配列 (数値以外の値は無視される) | 
| 計算方法 | 定数 | 必須 | 計算方法を示す定数 | 
| CALC_ADD: 合計値を得る | |||
| CALC_MIN: 最小値を得る | |||
| CALC_MAX: 最大値を得る | |||
| CALC_AVR: 平均値を得る | |||
| 開始 | 数値 | 省略可 | 計算範囲の開始位置 (インデックス) | 
| 終了 | 数値 | 省略可 | 計算範囲の終了位置 (インデックス) 省略時は末尾まで | 
| 結果 | 数値 | 戻り値 | 計算結果 | 
arr = [1,2,3,4,5]
print calcarray(arr, CALC_ADD) // 15
print calcarray(arr, CALC_MIN) // 1
print calcarray(arr, CALC_MAX) // 5
print calcarray(arr, CALC_AVR) // 3
// 範囲指定
print calcarray(arr, CALC_ADD, 2, 3) // 7
print calcarray(arr, CALC_MIN, 2, 3) // 3
print calcarray(arr, CALC_MAX, 2, 3) // 4
print calcarray(arr, CALC_AVR, 2, 3) // 3.5
// 数値以外は無視される
arr = [1,2,"foo",4,5]
print calcarray(arr, CALC_ADD) // 12
print calcarray(arr, CALC_MIN) // 1
print calcarray(arr, CALC_MAX) // 5
print calcarray(arr, CALC_AVR) // 3 ※ 数値要素が4つなので (1+2+4+5) / 4
SETCLEAR
対応バージョン: 0.8.0
指定した値で配列を埋めます
setclear(var 配列, 値=EMPTY)
| 変数名 | 型 | 種別 | 説明 | 
|---|---|---|---|
| 配列 | 配列 | 参照渡し | 対象の配列 | 
| 値 | 値 | 省略可 | 埋める値 | 
arr = [1,2,3,4,5]
print arr // [1, 2, 3, 4, 5]
setclear(arr)
print arr // [, , , , ]
setclear(arr, 111)
print arr // [111, 111, 111, 111, 111]
SHIFTARRAY
対応バージョン: 0.8.0
指定した値の分配列をずらします
shiftarray(var 配列, シフト値)
| 変数名 | 型 | 種別 | 説明 | 
|---|---|---|---|
| 配列 | 配列 | 参照渡し | 対象の配列 | 
| シフト値 | 数値 | 必須 | 指定値分後方へずらす、マイナスなら前方 (空いた場所はEMPTYで埋められる) | 
arr = [1,2,3,4,5]
print arr // [1, 2, 3, 4, 5]
shiftarray(arr, 2)
print arr // [, , 1, 2, 3]
shiftarray(arr, -2)
print arr // [1, 2, 3, , ]