何が正しい削除の要素からscalaの変更可能な地図を使用し述語
-
21-09-2019 - |
質問
どのようなこさず新作コレクション?のようなものはありますよ。
val m = scala.collection.mutable.Map[String, Long]("1" -> 1, "2" -> 2, "3" -> 3, "4" -> 4)
m.foreach(t => if (t._2 % 2 == 0) m.remove(t._1))
println(m)
P.S.にScala2.8
解決
retain
は何をしたいん。 2.7でます:
val a = collection.mutable.Map(1->"one",2->"two",3->"three")
a: scala.collection.mutable.Map[Int,java.lang.String] =
Map(2 -> two, 1 -> one, 3 -> three)
scala> a.retain((k,v) => v.length < 4)
scala> a
res0: scala.collection.mutable.Map[Int,java.lang.String] =
Map(2 -> two, 1 -> one)
これも動作しますが、私は2.8で、まだ流動的であると思います。
他のヒント
Scalaの可変マップごとにリファレンス・ページ、あなたはどちらかと単一の要素を削除することができます - =または削除、そのようなます:
val m = scala.collection.mutable.Map[String, Long]("1" -> 1, "2" -> 2, "3" -> 3, "4" -> 4)
m -= "1" // returns m
m.remove("2") // returns Some(2)
の差はつまり - 削除が除去されたキーに対応する値を含むオプションを返しながら(一があった場合)=、元のマップ・オブジェクトを返す
他の回答が示すように、あなたが条件に基づいて、多くの要素を削除したい場合は、もちろん、あなたが、保持になどのフィルタを、確認する必要があります。
を使用している場合には、これは immutable.Map
, は、 2.7 してやる必要があることもありのようなもの:
def pred(k: Int, v: String) = k % 2 == 0
m --= (m.filter(pred(_, _)).keys
はありません retain
方法。このケースでは明らかに m
必要として宣言されている var
所属していません StackOverflow