Scala 从 Map 中的数组获取数组
Scala get Array from array in Map
我是 scala 的新手,有地图:(是这样,因为我从 mongo 得到了像这样的巨大地图)
val test = Map(
"temp" -> Array( 1,
Array(
1, "kisa"
)
)
)
我怎样才能得到 "kisa"?
所以...让我解释一下,
val test = Map(
"temp" -> Array( 1,
Array(
1, "kisa"
)
)
)
现在 test
是 scala.collection.immutable.Map[ String, Array[ Any ] ]
这意味着 map
从 String
到 Array[ Any ]
.
所以...要获取与键关联的值 - "temp",您需要
val tempVal = test( "temp" )
现在,tempVal
的类型是 Array[ Any ]
,它的值是 Array( 1, Array( 1, kisa ) )
我们想要的是此数组中的第二个(索引 = 1)条目。
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 ]
大功告成。
只需一行即可完成....
val kisa = test( "temp" )( 1 ).asInstanceOf[ Array[ Any ] ]( 1 ).asInstanceOf[ String ]
模式匹配优于asInstanceOf
:
test("temp") match {
case Array(_, Array(_, s: String)) =>
s
}
瞧。
如果你想将结果绑定到一个变量,而不是仅仅返回它,你甚至可以将它缩短为:
val Array(_, Array(_, s: String)) = test("temp")
Scala REPL 响应:
s: String = kisa
我是 scala 的新手,有地图:(是这样,因为我从 mongo 得到了像这样的巨大地图)
val test = Map(
"temp" -> Array( 1,
Array(
1, "kisa"
)
)
)
我怎样才能得到 "kisa"?
所以...让我解释一下,
val test = Map(
"temp" -> Array( 1,
Array(
1, "kisa"
)
)
)
现在 test
是 scala.collection.immutable.Map[ String, Array[ Any ] ]
这意味着 map
从 String
到 Array[ Any ]
.
所以...要获取与键关联的值 - "temp",您需要
val tempVal = test( "temp" )
现在,tempVal
的类型是 Array[ Any ]
,它的值是 Array( 1, Array( 1, kisa ) )
我们想要的是此数组中的第二个(索引 = 1)条目。
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 ]
大功告成。
只需一行即可完成....
val kisa = test( "temp" )( 1 ).asInstanceOf[ Array[ Any ] ]( 1 ).asInstanceOf[ String ]
模式匹配优于asInstanceOf
:
test("temp") match {
case Array(_, Array(_, s: String)) =>
s
}
瞧。
如果你想将结果绑定到一个变量,而不是仅仅返回它,你甚至可以将它缩短为:
val Array(_, Array(_, s: String)) = test("temp")
Scala REPL 响应:
s: String = kisa