読者です 読者をやめる 読者になる 読者になる

by shigemk2

当面は技術的なことしか書かない

filterKeys + containsの怪

Scala
scala> val a = Map("hoge" -> 1)
a: scala.collection.immutable.Map[String,Int] = Map(hoge -> 1)

scala> val d = Set("hoge")
d: scala.collection.immutable.Set[String] = Set(hoge)

scala> a.filterKeys(!d.contains(_)).size
res0: Int = 0

scala> val a = Map()
a: scala.collection.immutable.Map[Nothing,Nothing] = Map()

scala> a.filterKeys(!d.contains(_)).size
res1: Int = 0

scala> val a = Map("" -> "")
a: scala.collection.immutable.Map[String,String] = Map("" -> "")

scala> a.filterKeys(!d.contains(_)).size
res2: Int = 1

Scalaでリスト処理

Map aに対して、filterKeysでSet dで定義されている名前がMap Aのキーが無いことを確認したい。Setで定義されている名前がMapになかったらsizeの値が大きくなり、Setで定義されている名前がMapにすべてあれば、sizeは0になるはず。

で、やってみると空Mapだとなぜか0なのね。hogeキーがないのに、0。なんだかよくわからないので、空文字列キーの空文字列バリューでごまかすというソリューションを考えてみた。