我是斯卡拉的新人,有地图:(就这样,因为我从mongo获得了这样巨大的地图)
val test = Map(
"temp" -> Array( 1,
Array(
1, "kisa"
)
)
)
我如何得到" kisa" ?
答案 0 :(得分:3)
模式匹配优于asInstanceOf
:
test("temp") match {
case Array(_, Array(_, s: String)) =>
s
}
瞧。
如果要将结果绑定到变量,而不是仅仅返回它,您甚至可以将其缩短为:
val Array(_, Array(_, s: String)) = test("temp")
Scala REPL响应的:
s: String = kisa
答案 1 :(得分:2)
所以......让我解释一下,
val test = Map(
"temp" -> Array( 1,
Array(
1, "kisa"
)
)
)
现在test
为scala.collection.immutable.Map[ String, Array[ Any ] ]
,这意味着从map
到String
的{{1}}。
所以...要获得与关键字相关的价值 - “临时”,你做
Array[ Any ]
现在,val tempVal = test( "temp" )
的类型为tempVal
,其值为Array[ Any ]
我们想要的是此数组中的第二个(index = 1)条目。
Array( 1, Array( 1, kisa ) )
现在...... val secondEntry = tempVal( 1 )
的类型为secondEntry
,其值为Any
...我们现在无法获取Array( 1, Kisa )
...首先我们必须投这个从Kisa
到Any
。
Array[ Any ]
现在...... val secondEntryArray = secondEntry.asInstanceOf[ Array[ Any ] ]
的类型为secondEntryArray
,其值为Array[ Any ]
现在,我们必须从这个数组中获得第二个条目,
Array( 1, kisa )
现在...... val kisaVal = secondEntryArray( 1 )
的类型为kisaVal
,其值为Any
。你知道它是kisa
,你可能想要它作为String
...所以让我们把它输入到一个字符串,
String
你已经完成了。
只需一行即可......
val kisaString = kisaVal.asInstanceOf[ String ]