一个经典的程序员名言是: “如果只能有一种数据结构,那就用哈希表吧。
”哈 希表一一-或者更笼统地说,映射一一是最灵活多变的数据结构之一。
1.Scala有十分易用的语法来创建、查询和遍历映射。
2.你需要从可变的和不可变的映射中做出选择。
3.默认情况下,你得到的是一个哈希映射,不过你也可以指明要树形映射。
创建映射
不可变的集合
val scores =Map (”Alice”-> 10,”Bob'’-> 3 ,”C工ndy”-> 8)
可变的集合
val scores = scala.coll ection.mutable.Map (”Alice”-> 10,”Bob'’-> 3, ”Cindy”-> 8)
获取映射中的值
val bobsScore =scores (”Bob”)
//类似于Java中的scores.get (”Bob”)
如果映射并不包含请求中使用的键,则会抛出异常。
要检查映射中是否有某个指定的键,可以用contains方法
val bobsScore = if (scores.conta工ns (”Bob”)) scores (” Bob”) else 0
可以
val bobsScore = scores.getOrElse ( ”Bob”, 。)
最后,映射 . get(键)这样的调用返回一个Option对象,
要么是Some (键对应的 值),要么是None。
更新
scores (”Bob”) = 10
//更新键”Bob”对应的位(假定scores是可变的)
scores (”Fred") = 7
// 增加新的键/位对偶到 scores (假定它是可变的)
// 或者,你也可以用+=操作来添加多个关系:
scores += (”Bob”-> 10,”Fred”-> 7)
scores -= ” Alice” //移除
不可变的映射可以通过创建新的集合来创建
迭代映射
for ( (k, v ) <-映射)处理 k 和 v
如果出于某种原因,你只需要访问键或值,像Java一样,则可以用 keySet 和values方法 。 values方法返回一个I terable ,你可以在 for循环中使用这个
Iterable。
要反转一个映射一一即交换键和值的位置,可以用
for ( (k, v)←映射) yield (v, k)
己排序映射
val scores = scala .collection .mutable.SortedMap (”Al工ce " - > 10,
” Fred" - > 7, ” Bob” - > 3 , ”C工ndy” -> 8)
网友评论