scala - 在 scala 中,如何以正确的顺序从映射中获取键和值的数组(第 i 个键用于第 i 个值)?

标签 scala scala-collections

假设我在 Scala 中有一个映射 - 键:字符串,值:字符串。

有没有一种简单的方法可以按相应的顺序获取键和值的数组?例如。 key 数组的第 i 个元素应该是与 values 数组的第 i 个值相关的键。

我尝试的是遍历 map 并一一获取它们:

valuesMap.foreach{keyVal => keys.append(keyVal.1); values.append(keyVal.2); // the idea, not the actual code

有没有更简单的方法?

可能会问这个问题:有没有办法保证map.keys/map.values的特定顺序?

例如,在生成 SQL 查询时,将列名和值分别设置为数组可能很方便,但顺序相同。

最佳答案

您可以使用 toSeq 来获取具有固定顺序的对序列,然后您可以通过键(或对的任何其他函数)进行排序。例如:

scala> val pairs = Map(3 -> 'c, 1 -> 'a, 4 -> 'd, 2 -> 'b).toSeq.sortBy(_._1)
res0: Seq[(Int, Symbol)] = ArrayBuffer((1,'a), (2,'b), (3,'c), (4,'d))

现在你可以使用 unzip 把这个对序列变成一对序列:

scala> val (keys, vals) = pairs.unzip
keys: Seq[Int] = ArrayBuffer(1, 2, 3, 4)
vals: Seq[Symbol] = ArrayBuffer('a, 'b, 'c, 'd)

键和值会对齐,您只执行了一次排序操作。

关于scala - 在 scala 中,如何以正确的顺序从映射中获取键和值的数组(第 i 个键用于第 i 个值)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25567818/

相关文章:

scala - 如何将元组的元组转换为 map

scala - 如何在scaladoc中转义/*?

Scala 相当于 Python 的 "in"集合运算符?

Scala 按未知数量的字段排序

scala - 用于转换为并行集合的通用类型参数

Scala - 存储 trie 的最佳数据结构

scala - 从 sbt 运行 spark-shell

java - 如何在两个 JVM 实例之间共享内存?

scala - 如何旋转(圆形移位)Scala 集合

Scala:Seq.distinctOn 函数的实现