Mapのメソッド

基本操作

val map = Map(1->"one", 2->"two", 3->"three") // 生成

map + (4->"four") // キー・値の追加
map + (4->"four", 5->"five") // キー・値の追加
map - 2 // キーを指定してキー・値の削除

map.size // 長さを得る 3

map(1) // 値取得 one
map.apply(1) // 上と同じ
map.get(1) match { // 値取得
  case Some(v) => v
  case None => "Unknown"
}
map.getOrElse(1, "Unknown") // 上に同じ

map.contains(5) // 指定されたキーがあるかどうか false

map.keySet // キーのSetが返る Set(1,2,3)
for(k <- map.keys) println(map(k)) // キーの繰り返し
for(v <- map.values) println(v) // 値の繰り返し
for(kv <- map) println("%d:%s".format(kv._1, kv._2)) // キー・値の繰り返し

より高度な操作

// key-valueのうち、keyの値でフィルタ
map.filter((kv) => kv._1 >= 2) // キー1がフィルタされたMapが返る
map.filterKeys(_ >= 2) // 上と同じ

// key-valueに対して操作し、結果をリスト or マップで返す
map.map((kv) => "%d:%s".format(kv._1, kv._2))  // List(1:one, 2:two, 3:three)
map.map { case (k,v) => (k,v*k) } // Map(1->"one", 2->"twotwo", 3->"threethreethree")

// 全valueに対して関数を実行した結果をMapで返す
val jap = Map("one"->"ICHI", "two"->"NI", "three"->"SAN")
map.mapValues((v) => jap(v)) // Map(1->"ICHI", 2->"NI", 3->"SAN")

// キーが奇数の時のみ"キー:値"という形式のListを返す
map.collect {
  case(k, v) if (k % 2 == 1) => "%d:%s".format(k,v) // List(1,3)
}