我有一个键值对的映射,我正在尝试获取给定键的值,但是虽然它返回一个值,但是它带有一些,任何想法我怎么能摆脱它? 我的代码是:
val jsonmap = simple.split(",\"").toList.map(x => x.split("\":")).map(x => Tuple2(x(0), x(1))).toMap
val text = jsonmap.get("text")
“text”是键,我想要它映射到的值,我目前得到以下输出:
Some("4everevercom")
我尝试使用flatMap而不是Map,但它不起作用
答案 0 :(得分:5)
您正在寻找apply
方法。 Seq
,Set
和Map
实施了不同的apply
方法,区别在于每个方法之间的主要区别。
作为一种语法糖,.apply
中可以省略o.apply(x)
,所以你只需要这样做:
val text = jsonmap("text") // pass "key" to apply and receive "value"
对于Seq
,apply
会获取一个索引并返回一个值,就像您在自己的示例中所使用的那样:
x(0), x(1)
对于Set
,apply
取值,并返回Boolean
。
答案 1 :(得分:4)
您可以使用getOrElse,@Brian stated或“apply”方法并自行处理缺席值:
val text: String = jsonmap("text")
// would trow java.util.NoSuchElementException, if no key presented
此外,您可以设置一些默认值,这样如果找不到密钥,Map就可以回退到它:
val funkyMap = jsonmap.get("text").withDefaultValue("")
funkyMap("foo")
// if foo or any other key is not presented in map, "" will be returned
如果您想要所有缺失键的默认值,请使用它。
答案 2 :(得分:3)
如果您有一个或您指定的默认值,则可以使用getOrElse
获取Some
的值。如果密钥存在于地图中,您将从Some
获取值。如果密钥不存在,您将获得指定的值。
scala> val map = Map(0 -> "foo")
map: scala.collection.immutable.Map[Int,String] = Map(0 -> foo)
scala> map.get(0)
res3: Option[String] = Some(foo)
scala> map.getOrElse(1, "bar")
res4: String = bar
另外,有关Scala的部分和无选项的信息,请参阅此处:http://www.codecommit.com/blog/scala/the-option-pattern
答案 3 :(得分:0)
只是提供其他选项,可以帮助您使用Option
以及标准库中的其他类似结构。
您还可以对选项进行迭代(映射)。这是有效的,因为Option
是一个Iterable
,包含零个或一个元素。
myMap.get(key) map { value =>
// use value...
}
等效地,如果您认为代码更清晰,则可以使用for
:
for (value <- myMap.get(key)) {
// use value...
}