配列(リスト)の一部を別の配列で置き換えるには (array_splice / splice)

配列(リスト)の一部を別の配列で置き換える方法。

PHP

array_splice($arr, $off, $len, $newSubArray); // $arr 自体を変更

Python

lst[off:endOff] = newSubList

Ruby

arr[off...endOff] = newSubArray

関連

PHP

array_splice関数を使う。引数に渡した配列自体を書き換える。

$arr = array(10, 20, 30, 40, 50);
var_export($arr); echo "\n";
// =>
// array (
//   0 => 10,
//   1 => 20,
//   2 => 30,
//   3 => 40,
//   4 => 50,
// )

array_splice($arr, 3, 1, array(100, 200, 300));
var_export($arr); echo "\n";
// =>
// array (
//   0 => 10,
//   1 => 20,
//   2 => 30,
//   3 => 100,
//   4 => 200,
//   5 => 300,
//   6 => 50,
// )

array_splice 関数 | PHP Manual
http://php.net/manual/ja/function.array-splice.php

Python

スライスの書式を代入演算子の左辺に置くと、その部分リストを新しいリストに置き換えられる。

lst = [10, 20, 30, 40, 50]

lst[3:4] = [100, 200, 300]
print(lst)
# => [10, 20, 30, 100, 200, 300, 50]

lst[2:] = [1, 2, 3]
print(lst)
# => [10, 20, 1, 2, 3]

Ruby / JRuby

Array#[] を使ったスライスを代入演算子の左辺に置くと、その部分リストを新しいリストに置き換えられる。

arr = [0, 10, 20, 30, 40, 50]
arr[3..4] = [100, 200, 300]
p arr
# => [0, 10, 20, 100, 200, 300, 50]

arr = [0, 10, 20, 30, 40, 50]
arr[3...4] = [100, 200, 300]
p arr
# => [0, 10, 20, 100, 200, 300, 40, 50]

arr = [0, 10, 20, 30, 40, 50]
arr[3,2] = [100, 200, 300]
p arr
# => [0, 10, 20, 100, 200, 300, 50]

[s..e]の表記の場合は2つ目の数字のインデックス位置を含む
[s...e]の表記の場合は2つ目の数字のインデックス位置を含まない

Pythonの lst[2:] みたいに後ろを省略する書き方ができない。

[s,l] の表記の場合はfromとlengthの指定になる。

このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。