Scala学习第十五弹 映射

一个经典的程序员的名言是:如果只能有一种数据结构,那就用哈希表吧。哈希表,更笼统的说——映射是最灵活的数据结构之一,在Scala中使用映射十分简单
映射是键/值对对偶的集合。scala中有个通俗的叫法——元组——n个对象的聚集,并不一定是相同类型的。
构造映射
val prices = Map(“apple” -> 5,”peace”->7 )
//上述代码构造了一个不可变Map[String,Int],其值并不能改变,入股哦想要一个可变映射:
val prices =scala.collection.mutable.Map(“apple” -> 5,”peace”->7 )
如果想从一个空的映射开始,你需要选定一个映射,并确定其类型参数,如:
val prices = new scala.collection.mutable.HashMap[String,Int]
在Scala中,映射是对偶的集合,对偶简单来说就是两个值构成的组,这两个值并不一定是相同类型的
->操作符用来创建对偶。如::apple”->10//(“apple”.10)
你也可以这样构造映射:
val prices = Map((”apple”, 5),(”peace”,7) )
只不过操作符->更加易读也更符合大家对映射的直接感觉
获取映射的值
在scala中函数和映射的相似性尤为明显,因为你用( )来查找某个键对相应的值
val appleprice = prices(“apple”)//类似于java中的prices.get(“apple”)
如果映射中并不包含查找的键,则会抛出异常。
Exception in thread “main” java.util.NoSuchElementException: key not found: appl
at scala.collection.MapLike class.default(MapLike.scala:228)atscala.collection.AbstractMap.default(Map.scala:59)atscala.collection.MapLike class.apply(MapLike.scala:141)
at scala.collection.AbstractMap.apply(Map.scala:59)
at Test.TEST$.main(TEST.scala:6)
at Test.TEST.main(TEST.scala)
要检查映射中是否有要查找的键,可以用contains方法
val appleprice = if(prices.contains(“apple”))prices(“apple”) else 0
由于这样的组合调用十分普遍,可以简写:
val appleprice = prices.getOrElse(“apple”, 0)//如果包含有apple键,则返回apple的值,没有则返回0
最后,映射。get(键)返回的是一个Option对象,要不是Some(值),要么None。后面会详细介绍Option这个类
更新映射的值
注意:这儿的映射必须是可变得
在可变映射中,可以更新某一个映射的值,也可以添加新的映射关系,方法是:=的左侧使用( )。
prices(“apple”) = 7//把apple的值改为7
prices(“watermalen”) = 7//新增加一个watermalen
或者你可以使用+=操作符来增添多个映射关系:
prices +=(“a”->1,”b”-.>4)
移除某个键值对:
prices -=”apple”
迭代映射
如下则很短超简单的代码可以遍历所有的键值对
for ((k, v) <- prices)
print((k, v))
这之所以简单是因为scala中使用了模式匹配,这样一来就不需要冗杂的方法调用,就可以得到每一个键值对。
如果你只想得到键或者值时你可以使用KeySet和values方法
prices.KeySet//得到键的集合
prices.values//得到指的集合
要反转一个映射,即交换键和值的位置:
for((k,v) <- 映射) yield(v,k)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值