加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala – map函数 – 仅返回Map的最后一个元素

发布时间:2020-12-16 18:19:06 所属栏目:安全 来源:网络整理
导读:我是 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) 这是一个map函数和结果: scala val result1 = map1.
我是 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)

这是一个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)

这是另一个map函数和结果:

scala> val result1 = map1.map(kv => (kv._1.length,kv._2))
    result1: scala.collection.immutable.Map[Int,Int] = Map(3 -> 3)

第一个map函数按预期返回所有成员,但第二个map函数仅返回Map的最后一个成员.有人可以解释为什么会这样吗?

提前致谢!

解决方法

在Scala中,Map不能有重复的键.添加新密钥时 – >值对映射,如果该键已存在,则覆盖以前的值.如果您要从集合上的功能操作创建映射,那么您将最终得到与每个唯一键的最后一个实例对应的值.在您编写的示例中,原始映射map1的每个字符串键具有相同的长度,因此所有字符串键都为result1生成相同的整数键3.在计算结果1的情况下发生的事情是:

>创建一个新的空地图
>您映射“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确定,可能与您添加元素的顺序不匹配,因此不要构建依赖于此假设的任何内容.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读