cha*_*rlx 4 dictionary scala key duplicates key-value
我是Scala的新手并在地图上尝试了地图功能.这是我的地图:
scala> val map1 = Map ("abc" -> 1, "efg" -> 2, "hij" -> 3)
map1: scala.collection.immutable.Map[String,Int] =
Map(abc -> 1, efg -> 2, hij -> 3)
Run Code Online (Sandbox Code Playgroud)
这是一个map函数和结果:
scala> val result1 = map1.map(kv => (kv._1.toUpperCase, kv._2))
result1: scala.collection.immutable.Map[String,Int] =
Map(ABC -> 1, EFG -> 2, HIJ -> 3)
Run Code Online (Sandbox Code Playgroud)
这是另一个map函数和结果:
scala> val result1 = map1.map(kv => (kv._1.length, kv._2))
result1: scala.collection.immutable.Map[Int,Int] = Map(3 -> 3)
Run Code Online (Sandbox Code Playgroud)
第一个map函数按预期返回所有成员,但第二个map函数仅返回Map的最后一个成员.有人可以解释为什么会这样吗?
提前致谢!
在Scala中,a Map不能有重复的键.key -> value向a 添加新对时Map,如果该键已存在,则覆盖以前的值.如果您要从集合上的功能操作创建映射,那么您将最终得到与每个唯一键的最后一个实例对应的值.在你写的例子,原来地图的每个字符串键map1具有相同的长度,所以你的所有字符串键生成相同的整数关键3的result1.在引擎盖下计算的result1是:
"abc" -> 1到3 -> 3,并将其添加到地图中.结果现在包含1 -> 3."efg" -> 2到3 -> 2,并将其添加到地图中.由于密钥相同,因此您将覆盖现有值key = 3.结果现在包含2 -> 3."hij" -> 3到3 -> 3,并将其添加到地图中.由于密钥相同,因此您将覆盖现有值key = 3.结果现在包含3 -> 3.Map(3 -> 3``.注意:我做了一个简化的假设,即map迭代器中元素的顺序与您在声明中编写的顺序相同.订单由散列bin确定,可能与您添加元素的顺序不匹配,因此不要构建依赖于此假设的任何内容.
| 归档时间: |
|
| 查看次数: |
466 次 |
| 最近记录: |