私は問題に直面しています: 内部の1つの要素を変更したいのですが、コードがすべての要素を変更しています。 私は間違ったことをする必要があります。 は、ここで私が持っているものです。スカラ:地図内のリスト内の値を変更
var critics: Map[String, List[(String, Double)]] = Map(
"First" -> List(("a", 1.0), ("b", 2.0)),
"Second" -> List(("c", 3.0), ("d", 4.0))
)
def setNewRating(keyMap: String, param1: String, newRating: Double) = {
val newList = critics(keyMap).map{case (param1, _) => (param1, newRating); case x => x}
critics = critics + (keyMap -> newList)
}
println(critics)
setNewRating("First", "b", 5.0)
println(critics)
をので、私は「最初」のキーを探していると私は2.0から5.0までが、私は取得しています結果は「b」を変更したいリストを取得しています:
critics: Map[String,List[(String, Double)]] = Map(First -> List((a,1.0), (b,2.0)), Second -> List((c,3.0), (d,4.0)))
setNewRating: (keyMap: String, param1: String, newRating: Double)Unit
Map(First -> List((a,1.0), (b,2.0)), Second -> List((c,3.0), (d,4.0)))
Map(First -> List((a,5.0), (b,5.0)), Second -> List((c,3.0), (d,4.0)))
コードがすべての値を変更しました!
ありがとうございます。
はい、私もこのVaRの事を好きではないが、私は、私は「Scalaの道」(私はJavaのバックグラウンドを持っている)でそれを行うことができますかわからないの参照を見つけることができます!メソッドから新しいMapを返すかもしれませんか? – MLeiria
はい、新しい地図を返します。また、それを入力として渡すことは良いアイデアです(「良い」関数は副作用を引き起こさず、外部からのデータに依存しません):println(setNewRating(critics、 "First"、 "b"、5 )) ') – Dima