2016-01-24 36 views
0

考慮階以下變量中:斯卡拉:如何找到類型的值一階嵌套集合

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]]作爲其值的類型

+0

有一些不正確的和我坐在這裏。如果你是創建「nestedCollection_1」的人,那意味着你已經把它變成了'Array [Map [String,Map [String,String]]',對吧?你是否閱讀nestedCollection作爲序列化的對象? – marios

+0

「nestedCollection_1」在這裏我有硬編碼的測試目的。稍後我將通過從文件中讀取來分配值爲「nestedCollection_1」的值。 Łukasz給出的答案是我期待的。 – Sriram

回答

1

我不確定你的意思是什麼。編譯器可以確保在任何變量的類型,如果你只是註釋類型:

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

你可以看到變量的類型在斯卡拉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)) 

編輯

我想我現在得到你的問題。這裏是你如何能得到類型爲字符串:

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])] 
+0

我從文件中讀取輸入,並且輸入的預期格式位於另一個文件中。我需要確保從文件中讀取的輸入與在另一個文件中定義的預期格式相匹配 – Sriram

+0

你說你從變量讀取值,現在你說你從文件中讀取它們。那麼如何將字符串從文件轉換爲未知的變量?它的格式是什麼? –

+0

對不起,混淆了......輸入直接存儲在一個變量中,期望的格式存儲在一個文件中...我將從文件中讀取期望的格式,並檢查輸入變量是否與我從中讀取的預期格式匹配文件 – Sriram