Scala:如何在scala嵌套集合中查找值的类型

时间:2016-01-24 15:56:26

标签: scala collections nested scala-collections instanceof

考虑scala中的以下变量:

val nestedCollection_1 = Array(
  "key_1" -> Map("key_11" -> "value_11"),
  "key_2" -> Map("key_22" -> "value_22"))

val nestedCollection_2 = Map(
  "key_3"-> ["key_33","value_33"],
  "key_4"-> ["key_44"->"value_44"])

以下是我的问题:

1)我想读取变量nestedCollection_1nestedCollection_2的值,并确保变量的值具有格式

Array[Map[String, Map[String, String]]

Map[String, Array[String]]]

2)是否可以在scala中获取变量的详细类型?即nestedColelction_1.SOME_METHOD应返回Array[Map[String, Map[String, String]]作为其值的类型

1 个答案:

答案 0 :(得分:1)

我不确定你的意思是什么。如果您只是注释类型,编译器可以确保任何变量的类型:

val nestedCollection_2: Map[String, List[String]] = Map(
  "key_3"-> List("key_33", "value_33"),
  "key_4"-> List("key_44", "value_44"))

您可以在定义时在scala repl中查看变量类型,或者在Intellij Idea中使用Alt + =

scala> val nestedCollection_2 = Map(
     |   "key_3"-> List("key_33", "value_33"),
     |   "key_4"-> List("key_44", "value_44"))
nestedCollection_2: scala.collection.immutable.Map[String,List[String]] = Map(key_3 -> List(key_33, value_33), key_4 -> List(key_44, value_44))

修改

我想我现在回答你的问题。以下是如何将类型作为String:

import scala.reflect.runtime.universe._
def typeAsString[A: TypeTag](elem: A) = {
  typeOf[A].toString
}

测试:

scala> typeAsString(nestedCollection_2)
res0: String = Map[String,scala.List[String]]
scala> typeAsString(nestedCollection_1)
res1: String = scala.Array[(String, scala.collection.immutable.Map[String,String])]