【问题标题】:Scala : How to find types of values inside a scala nested collectionScala:如何在 Scala 嵌套集合中查找值的类型
【发布时间】:2016-04-30 21:26:15
【问题描述】:

在 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]] 作为其值的类型

【问题讨论】:

  • 这里有些东西不适合我。如果您是创建“nestedCollection_1”的人,则意味着您已经将其设为Array[Map[String, Map[String, String]],对吗?您是否将nestedCollection 作为序列化对象读取?
  • 这里的“nestedCollection_1”是为了测试目的而硬编码的。稍后我将通过从文件中读取来为“nestedCollection_1”赋值。 Łukasz 给出的答案是我所期待的。

标签: scala collections nested scala-collections instanceof


【解决方案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])]

【讨论】:

  • 我从一个文件中读取输入,并且输入的预期格式在另一个文件中。我需要确保从文件中读取的输入与另一个文件中定义的预期格式相匹配
  • 你说你从变量中读取值,现在你说你从文件中读取它们。那么如何将文件中的字符串转换为您键入的未知变量呢?它的格式是什么?
  • 很抱歉造成混淆......输入直接存储在变量中,预期格式存储在文件中......我将从文件中读取预期格式并检查输入变量是否匹配具有我从文件中读取的预期格式
  • 非常感谢 :) 编辑后的答案是我所期待的 :) :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
相关资源
最近更新 更多