假设我在 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/