ライトな感じで結合する
Perlとか書いているとこんな感じでハッシュを結合することがある。
my %hoge = (a => 1, b => 2);
my %fuga = (%hoge, c => 3);
この例だけ見るとアレだけど、関数の戻り値とかをねじ込みたいとか、親クラスのやつを上書きしてちょっと追加したいとか、たまにある。これと似たようなことをKotlinで実装したメモ。
val hoge = hashMapOf("a" to 1, "b" to 2)
val fuga = hashMapOf(*hoge.toList().toTypedArray(), "c" to 3)
一応解説
hashMapOf
は、引数がvarargになっている。varargな引数に渡せるのはリテラルの羅列だけでなく、実は配列もspread演算子を使うことで混ぜて渡すことができる。つまり、HashMap#toList
とList#toTypedArray
を使ってPairの配列にしてあげることで、hashMapOfに混ぜることができるようになる。
HashMapの例で説明したけども、hogeOf
系のやつならどれでも使えるテクニックだと思う。
参考
- https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/hash-map-of.html
- https://kotlinlang.org/docs/reference/functions.html#variable-number-of-arguments-varargs
追記
普通に+
で結合できる事案だった。とんでもない盲点だった。。。orz
ngsw_taroさんありがとうございます!!!