二次元配列の操作で
- 二次元配列に二次元配列を追加(破壊的/push)
- 二次元配列と二次元配列を結合(非破壊的/concat)
する方法がわからなかったので関数を作成した。
縦方向と横方向に追加、結合が可能。
追加(破壊的/push)
一次元配列に値をpushする際と同様に、二次元配列に二次元配列を破壊的に追加する。
[第3引数]
axis≠1: 縦方向に追加
axis=1: 横方向に追加
function pushTwoDimensionalArray(array1, array2, axis){
if(axis != 1) axis = 0;
if(axis == 0){ // 縦方向の追加
for(var i = 0; i < array2.length; i++){
array1.push(array2[i]);
}
}
else{ // 横方向の追加
for(var i = 0; i < array1.length; i++){
Array.prototype.push.apply(array1[i], array2[i]);
}
}
}
結合(非破壊的/concat)
一次元配列に値をconcatする際と同様に、二次元配列と二次元配列を非破壊的に結合する。
[第3引数]
axis≠1: 縦方向に結合
axis=1: 横方向に結合
function concatTwoDimensionalArray(array1, array2, axis){
if(axis != 1) axis = 0;
var array3 = [];
if(axis == 0){ // 縦方向の結合
array3 = array1.slice();
for(var i = 0; i < array2.length; i++){
array3.push(array2[i]);
}
}
else{ // 横方向の結合
for(var i = 0; i < array1.length; i++){
array3[i] = array1[i].concat(array2[i]);
}
}
return array3;
}
縦方向の追加(破壊的/push)
var arr1 = [['A1','B1','C1'],['A2','B2','C2'],['A3','B3','C3']];
var arr2 = [['A4','B4','C4'],['A5','B5','C5']];
pushTwoDimensionalArray(arr1, arr2);
pushTwoDimensionalArray()
実行後のarr1は下図のarr1(push後)
のようになる。
第1引数のarr1
の下側に、第2引数のarr2
を追加(push)する。
横方向の追加(破壊的/push)
var arr3 = [['A1','B1','C1'],['A2','B2','C2'],['A3','B3','C3']];
var arr4 = [['D1','E1'],['D2','E2'],['D3','E3']];
pushTwoDimensionalArray(arr3, arr4, 1);
横方向に追加する場合は第3引数(axis)を1
に指定する。
pushTwoDimensionalArray()
実行後のarr3は下図のarr3(push後)
のようになる。
第1引数のarr3
の右側に、第2引数のarr4
を追加(push)する。
縦方向の結合(非破壊的/concat)
var arr1 = [['A1','B1','C1'],['A2','B2','C2'],['A3','B3','C3']];
var arr2 = [['A4','B4','C4'],['A5','B5','C5']];
var arr12 = concatTwoDimensionalArray(arr1, arr2);
非破壊的に配列と配列を結合する場合はconcatTwoDimensionalArray()
を使用する。
横方向の結合(非破壊的/concat)
var arr3 = [['A1','B1','C1'],['A2','B2','C2'],['A3','B3','C3']];
var arr4 = [['D1','E1'],['D2','E2'],['D3','E3']];
var arr34 = concatTwoDimensionalArray(arr3, arr4, 1);
横方向に結合する場合はpushと同様に第3引数(axis)を1
に指定する。
まとめ
pythonのpandasのように二次元配列の追加、結合する関数を作成して使用例をまとめた。
使用例と図をまとめると直感的でわかりやすい。