連想配列(マップ/ハッシュ/ディクショナリ)に別の連想配列の要素をまとめて追加するには (putAll / ++ / array_merge / update / merge / merge!)

連想配列(マップ/ハッシュ/ディクショナリ)に別の連想配列の要素をまとめて追加する方法。

Java

Signature:

要素を1つだけ追加するにはputを使う。

Scala

Signature:

要素を追加した新しいマップを返し、自身は変更しない。

同じキーが両方の Map に含まれていた場合は右のものが優先される。

val map1 = Map("a" -> 1, "b" -> 2);
val map2 = Map("a" -> 10, "c" -> 30);

println(map1 ++ map2);
// => Map(a -> 10, b -> 2, c -> 30)

PHP

array_merge を使うと2つ以上の配列をマージしてできる新しい配列を取得することができる。元の配列は変更しない。

同じキーが複数の配列に含まれていた場合はあとから追加したもので上書きされる。

array_merge の代わりに array_merge_recursive を使うと、同じキーは要素自体が配列になり、値が失われない。

$arr1 = array('a' => 1, 'b' => 2, );
$arr2 = array('a' => 10, 'c' => 30, );

var_export(array_merge($arr1, $arr2));
// 出力結果
// array (
//   'a' => 10,
//   'b' => 2,
//   'c' => 30,
// )

var_export(array_merge_recursive($arr1, $arr2));
// 出力結果
// array (
//   'a' =>
//   array (
//     0 => 1,
//     1 => 10,
//   ),
//   'b' => 2,
//   'c' => 30,
// )

array_merge は配列が入れ子になっていた場合に再帰的に要素同士をマージすることはなくて、単純に要素全体が後から追加したもので上書きされる。

array_merge_recursive は要素同士もマージする。

$arr1 = array("a" => 1, "b" => array("bA" => 21));
$arr2 = array("b" => array("bB" => 22), "c" => 3);

var_export(array_merge($arr1, $arr2));
// 出力結果
// array (
//   'a' => 1,
//   'b' =>
//   array (
//     'bB' => 22,
//   ),
//   'c' => 3,
// )

var_export(array_merge_recursive($arr1, $arr2));
// array (
//   'a' => 1,
//   'b' =>
//   array (
//     'bA' => 21,
//     'bB' => 22,
//   ),
//   'c' => 3,
// )

array_merge に渡す配列のキーが数字の場合はリストの連結のような操作になる。 -> 配列に要素を追加

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

Python

updateメソッドを使うと、ディクショナリの要素をまとめて更新することができる。

dic = {'a': 1, 'b': 2}
dic.update({'b': 20, 'c': 30})
print(dic)
# => {'a': 1, 'b': 20, 'c': 30}

Ruby

Hash#merge を使うとマージした結果の新しいハッシュを生成できる。 Hash#merge! は破壊的メソッドのバージョン。

hash1 = {'a' => 1, 'b' => 2}
hash2 = {'a' => 10, 'c' => 30}
merged_hash = hash1.merge(hash2)

p merged_hash
# => {"a"=>10, "b"=>2, "c"=>30}

Perl

ハッシュをマージする例

my %hash1 = ('a' => 10, 'b' => 20, 'c' => 30);
my %hash2 = ('c' => 300, 'd' => 400);
my %merged = (%hash1, %hash2);
print Dumper \%merged;
# 出力結果
# $VAR1 = {
#           'c' => 300,
#           'a' => 10,
#           'b' => 20,
#           'd' => 400
# };

ハッシュへのレファレンスをマージする例

my $hash1 = {'a' => 10, 'b' => 20, 'c' => 30};
my $hash2 = {'c' => 300, 'd' => 400};
my $merged = {%$hash1, %$hash2};
print Dumper $merged;
# 出力結果
# $VAR1 = {
#           'c' => 300,
#           'a' => 10,
#           'b' => 20,
#           'd' => 400
# };
このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。
スポンサーリンク