使用 get 或 contains 使用 apply 方法从 Hashmap 获取值
Getting value from Hashmap with get or contains with apply method
从 hashmap 中获取值的更好方法是什么?
第一个选项:
val hm = HashMap(...)
if(hm.contains(keyWhichIsDefinitelyInTheKeys)){
hm(keyWhichIsDefinitelyInTheKeys) ... //do stuff
} else {
... //do stuff
}
第二个选项:
hm.get(keyWhichIsDefinitelyInTheKeys) match {
case Some => ...
case None => ...
} // do stuff
这对某些键更好:
hm.getOrElse(key, defaultValue)
//or
hm.getOrElse(key, sys.error(s"unexpected key: $key"))
//or more generally
hm.get(key).map(v => doStuff(v)).getOrElse(doOtherStuff)
你不能 100% 确定 Map
包含密钥,除了一些类型级别的保护(编译时检查);但是,如果你这样做了,那么 if
无论如何也帮不了你,所以只需:
hm(keyWhichIsDefinitelyInTheKeys)
正如dk14所说,如果你不确定Map是否包含key,你最好使用get
which return an Option
.
如果密钥不在 Map
中,您可以使用 getOrElse
设置默认值。
如果您没有要设置的默认值,如果 Option
包含 Some
而不是 None
[=19=,则可以使用 for
理解]
scala> val hm = Map( 1 -> "Hello")
hm: scala.collection.immutable.Map[Int,String] = Map(1 -> Hello)
scala> for (i <- hm.get(2) ) { println(i) }
scala> for (i <- hm.get(1) ) { println(i) }
Hello
表现中:
有测试码:http://pastebin.com/TbM82S7H
这是它的输出:http://pastebin.com/7An1DZw5
(cpu: i5 4590K)
None两次调用性能更好...
从 hashmap 中获取值的更好方法是什么?
第一个选项:
val hm = HashMap(...)
if(hm.contains(keyWhichIsDefinitelyInTheKeys)){
hm(keyWhichIsDefinitelyInTheKeys) ... //do stuff
} else {
... //do stuff
}
第二个选项:
hm.get(keyWhichIsDefinitelyInTheKeys) match {
case Some => ...
case None => ...
} // do stuff
这对某些键更好:
hm.getOrElse(key, defaultValue)
//or
hm.getOrElse(key, sys.error(s"unexpected key: $key"))
//or more generally
hm.get(key).map(v => doStuff(v)).getOrElse(doOtherStuff)
你不能 100% 确定 Map
包含密钥,除了一些类型级别的保护(编译时检查);但是,如果你这样做了,那么 if
无论如何也帮不了你,所以只需:
hm(keyWhichIsDefinitelyInTheKeys)
正如dk14所说,如果你不确定Map是否包含key,你最好使用get
which return an Option
.
如果密钥不在 Map
中,您可以使用 getOrElse
设置默认值。
如果您没有要设置的默认值,如果 Option
包含 Some
而不是 None
[=19=,则可以使用 for
理解]
scala> val hm = Map( 1 -> "Hello")
hm: scala.collection.immutable.Map[Int,String] = Map(1 -> Hello)
scala> for (i <- hm.get(2) ) { println(i) }
scala> for (i <- hm.get(1) ) { println(i) }
Hello
表现中:
有测试码:http://pastebin.com/TbM82S7H
这是它的输出:http://pastebin.com/7An1DZw5
(cpu: i5 4590K)
None两次调用性能更好...