[AD] Scalaアプリケーションの開発・保守は合同会社ミルクソフトにお任せください
Mapに要素を追加する方法について解説します。
サンプルのMapはこちらです。
User
クラスと、各ユーザーをMap
にまとめた変数map
を宣言します。
val map: Map[Int, User] = Map( 1 -> User("Andrea", "Thompson"), 2 -> User("Austin", "May"), 3 -> User("John", "Winston"), 4 -> User("Christina", "Chandler"), 5 -> User("John", "Thompson") )
+
メソッドを使用して要素を追加する
Map
に要素を追加するには+
メソッドを用います。
こちらは最もおすすめの書き方です。
val newMap = map + (6 -> User("Gloria", "Barney")) newMap.foreach(println)
出力は以下のようになります(順不同)。
要素が追加されているのがわかります。
(1,User(Andrea,Thompson)) (2,User(Austin,May)) (3,User(John,Winston)) (4,User(Christina,Chandler)) (5,User(John,Thompson)) (6,User(Gloria,Barney))
この際、元の変数map
自体は変化しません。
今度は変化していないことを確認するために、要素を追加したあとにnewMap
ではなくmap
を出力してみましょう。
map + (6 -> User("Gloria", "Barney")) map.foreach(println)
出力は以下のようになります(順不同)。
含まれている要素の個数、内容ともに変化がないことがわかります。
(1,User(Andrea,Thompson)) (2,User(Austin,May)) (3,User(John,Winston)) (4,User(Christina,Chandler)) (5,User(John,Thompson))
別の書き方で要素を追加する
同じ処理に対して複数の表現ができることの多いScalaですが、 Mapに要素を加える処理についても異なる書き方をすることができます。
Mapに要素を加える場合、要素をアローではなくタプルとして渡すことができます。
「前処理の結果、タプルが返ってくる」といった場合にもそのまま投入できることを覚えておきましょう。
val newMap = map + ((6, User("Gloria", "Barney"))) newMap.foreach(println)
出力は以下のようになります(順不同)。
ほどと同様、要素が追加されているのがわかります。
(1,User(Andrea,Thompson)) (2,User(Austin,May)) (3,User(John,Winston)) (4,User(Christina,Chandler)) (5,User(John,Thompson)) (6,User(Gloria,Barney))
要素の上書きをする
+
メソッドを使用する際、既存のキーを指定すると既存の要素を上書きすることができます。
val newMap = map + (1 -> User("Gloria", "Barney")) newMap.foreach(println)
上書きする場合も、要素をアローではなくタプルとして渡すこともできます。
val newMap = map + ((1, User("Gloria", "Barney"))) newMap.foreach(println)
出力はそれぞれ以下のようになります(順不同)。
素が上書きされていることがわかります。
(1,User(Gloria,Barney)) (2,User(Austin,May)) (3,User(John,Winston)) (4,User(Christina,Chandler)) (5,User(John,Thompson))
ただし、この場合も、元のmap
は上書きされないことに気をつけましょう。
今度は要素を追加したあとにnewMap
ではなくmap
を出力してみましょう。
map + (1 -> User("Gloria", "Barney")) map.foreach(println)
出力は以下のようになります(順不同)。
素が上書きされていないことがわかります。
(1,User(Andrea,Thompson)) (2,User(Austin,May)) (3,User(John,Winston)) (4,User(Christina,Chandler)) (5,User(John,Thompson))