0

如何检查哪个实例是当前对象。具体检查它是否是一个集合。

val maps = Map("s" -> 2, "zz" -> 23, "Hello" -> "World", "4" -> Map(11 -> "World"), "23333" -> true);

for(element <- maps) {
    if(element.isInstanceOf[Map]) { // error here
         print("this is a collection instance ");
    } 
    println(element);
}
4

2 回答 2

0

为了能够编译您的代码段,请将其更改为

if (element.isInstanceOf[Map[_, _]]) {

但是当您迭代“键/值对”时,它永远不会匹配。


所以可能你想要这样的东西:迭代值:

maps.values.foreach {
  case (m: Map[_, _]) => println(s"Map: $m" )
  case x => println(x)
}

或者如果您想遍历键/值对:

maps foreach {
  case (key, m: Map[_, _]) => println(s"Map: $key -> $m" )
  case (key, value) => println(s"$key -> $value")
}
于 2013-07-29T11:24:53.527 回答
0

如果你想检测任何Map

for(element <- maps) {
    if(element.isInstanceOf[Map[_, _]]) {
         print("this is a collection instance ")
    } 
    println(element)
}

但这不起作用,因为您检查的是整个元组(“s”-> 2 等)而不是元组的第二个元素:

for(element <- maps) {
    if(element._2.isInstanceOf[Map[_, _]]) {
         print("this is a collection instance ")
    }
    println(element._2)
}

或者使用模式匹配:

for((_, v) <- maps) {
    if(v.isInstanceOf[Map[_, _]]) {
         print("this is a collection instance ")
    }
    println(v)
}

或者更多的模式匹配:

maps foreach {
    case (_, v: Map[_, _]) => println("this is a collection instance " + v)
    case (_, v)            => println(v)
}
于 2013-07-29T11:16:47.087 回答