如何匹配空白地图?

时间:2019-04-29 19:45:54

标签: scala

我有一个Map,并且无论是否为空,我都希望有其他行为。我不知道如何匹配一个空的地图。我已经查阅了其他答案和模式匹配文档,但无法弄清楚。我认为Nil可能会像列表一样工作,但事实并非如此。我似乎也无法与Map()Map[String, String].emptyMap[String, String]()

匹配
myMap match {
   // doesn't work
   case Nil => false
   case _ => true
}

myMap match {
   // also doesn't work
   case Map[String, String]() => false
   case _ => true
}

this answer中的方法似乎对于检查地图是否为空是过大的。另外,接受的答案还会检查Map是否包含要匹配的任何地图,我认为这不适用于我的情况

3 个答案:

答案 0 :(得分:5)

Map并没有提供任何带有unapply()/unapplySeq()方法的提取器,因此无法在模式匹配中匹配键/值对。但是,如果您只需要在地图为空的情况下进行匹配,则可以:

val map = Map.empty[String, String]

val result = map match {
  case m:Map[String, String] if m.isEmpty =>  false
  case _ =>                                   true 
}

println(result)

输出:

false

答案 1 :(得分:1)

Map没有unapply()/unapplySeq()方法,因此无法通过模式匹配对其进行解构。

正如@Luis所说,NilList的终点,与Map无关。

答案 2 :(得分:0)

无需过多使用彭定康数学:

val map = Map.empty[String, String]

val result = map.nonEmpty

println(result) 

// Output: false

或者,如果您坚持逻辑或逻辑不只是对/错:

val map = Map.empty[String, String]

map.isEmpty match {
case true => 
    println("The map is empty")
case false => 
    println("The map is not empty") 
}

// Output: The map is empty