Scala从Map中的数组中获取Array

时间:2015-02-05 09:33:17

标签: arrays list scala dictionary

我是斯卡拉的新人,有地图:(就这样,因为我从mongo获得了这样巨大的地图)

val test = Map(
      "temp" -> Array( 1,
        Array(
          1, "kisa"
        )
      )
    )

我如何得到" kisa" ?

2 个答案:

答案 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"
    )
  )
)

现在testscala.collection.immutable.Map[ String, Array[ Any ] ],这意味着从mapString的{​​{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 ) ...首先我们必须投这个从KisaAny

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 ]