任意の位置の配列操作

back
splice を使う

splice @ARRAY, offset [, length, [LIST]]

基本は削除処理だが、削除した箇所にリストを追加することができる。
削除した要素は無くなり、該当添え字以降の要素が削除された分シフトされる。
削除数(length)を0にすれば、単純挿入になる。
戻り値は、削除された部分リスト

■ 指定要素以降の全ての要素を削除
@array = (0, 1, 2, 3, 4, 5, 6);
splice @array, 2;
# $array[2] 以降が全て削除される
# @array は (0, 1)

■ 指定要素以降の連続する要素をいくつか削除
@array = (0, 1, 2, 3, 4, 5, 6);
splice @array, 2, 4;
# $array[2]から、4つ(@array[2..5])が削除、以降が前に詰められる
# @array は (0, 1, 6)

■ 指定要素を1つ削除
@array = (0, 1, 2, 3, 4, 5, 6);
splice @array, 2, 1;
# $array[2]が無くなり、$array[3]以降が前に詰められる
# @array は (0, 1, 3, 4, 5, 6)
# 要は、削除の指定数が1つだけ、ということだ


■ 指定添え字の位置にリストを単純挿入
@array = (0, 1, 2, 3, 4, 5, 6);
splice @array, 2, 0, ("aaa", "bbb");
# $array[2] に "aaa", $array[3] に "bbb" が入り、元の $array[2] 以降が後へずれる
# @array は (0, 1, "aaa", "bbb", 2, 3, 4, 5, 6)
# 2 の位置から 0 個削除して(何も削除せず)その位置にリストを追加

offset, length に負数を指定した場合は、配列末尾からの位置になる
offset(基準点)は配列末尾からの位置になり、
length は、正数の場合は、offset からの相対位置になるが、負数の場合は、
配列末尾からの絶対位置までが処理対象になる。

多分

back