1, "efg" -> 2, "hij"-6ren">
gpt4 book ai didi

Scala - map 功能 - 只返回 map 的最后一个元素

转载 作者:行者123 更新时间:2023-12-04 22:57:04 29 4
gpt4 key购买 nike

我是 Scala 的新手,并在 Map 上尝试了 map 功能。
这是我的 map :

    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不能有重复的键。当您添加新 key -> value 时配对到 Map ,如果该键已存在,则覆盖先前的值。如果您从集合上的函数操作创建映射,那么您最终会得到与每个唯一键的最后一个实例相对应的值。在你写的例子中,原始 map 的每个字符串键map1具有相同的长度,所以你所有的字符串键产生相同的整数键 3result1 .引擎盖下发生了什么来计算 result1是:

  • 创建了一个新的空 map
  • 您的 map "abc" -> 13 -> 3并将其添加到 map 中。结果现在包含 1 -> 3 .
  • 您的 map "efg" -> 23 -> 2并将其添加到 map 中。由于 key 相同,您将覆盖 key = 3 的现有值。 .结果现在包含 2 -> 3 .
  • 您的 map "hij" -> 33 -> 3并将其添加到 map 中。由于 key 相同,您将覆盖 key = 3 的现有值。 .结果现在包含 3 -> 3 .
  • 返回结果,即 Map(3 -> 3 )`。

  • 注意:我做了一个简化的假设,即 map 迭代器中元素的顺序与您在声明中编写的顺序相同。顺序由哈希 bin 确定,可能与您添加元素的顺序不匹配,因此不要构建任何依赖于此假设的东西。

    关于Scala - map 功能 - 只返回 map 的最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40441430/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com