【问题标题】:Convert a Map[Int, Array[(Int, Int)]] to Map[Int, Map[Int, Int]] in Scala在 Scala 中将 Map[Int, Array[(Int, Int)]] 转换为 Map[Int, Map[Int, Int]]
【发布时间】:2019-01-01 11:56:29
【问题描述】:

我有这样的数据结构:

Map(
  0 -> Array((1,1), (2,1)),
  1 -> Array((2,1), (3,1), (0,1)),
  2 -> Array((4,1), (0,1), (1,1)),
  3 -> Array((1,1)),
  4 -> Array((5,1), (2,1)),
  5 -> Array((4,1))
)

我需要的结果应该是这样的:

Map(
  0 -> Map(1 -> 1, 2 -> 1),
  1 -> Map(2 -> 1, 3 -> 1, 0 -> 1),
  2 -> Map(4 -> 1, 0 -> 1, 1 -> 1),
  3 -> Map(1 -> 1),
  4 -> Map(5 -> 1, 2 -> 1),
  5 -> Map(4 -> 1)
)

【问题讨论】:

  • 到目前为止你尝试过做什么?
  • 您可以通过在 Scala 中编写一个程序来执行您想要的操作,从而获得您想要的输出。如果您编写的程序遇到问题,请仔细阅读您正在使用的所有方法、类和库的文档,在调试器中单步执行代码,编写测试,用笔和纸跟踪执行,以及如果您仍然无法解决问题……请等待一周,然后以新的眼光和新的头脑开始。然后,只有到那时,如果您仍然有问题,您可以阅读如何构建 minimal reproducible example 并在 Stack Overflow 上写一个狭窄、具体、集中的问题。

标签: arrays scala dictionary type-conversion


【解决方案1】:

真的很简单:yourMap.mapValues(_.toMap)

scala> :paste
// Entering paste mode (ctrl-D to finish)

Map(
  0 -> Array((1,1), (2,1)),
  1 -> Array((2,1), (3,1), (0,1)),
  2 -> Array((4,1), (0,1), (1,1)),
  3 -> Array((1,1)),
  4 -> Array((5,1), (2,1)),
  5 -> Array((4,1))
)

// Exiting paste mode, now interpreting.

res0: scala.collection.immutable.Map[Int,Array[(Int, Int)]] = Map(0 -> Array((1,1), (2,1)), 5 -> Array((4,1)), 1 -> Array((2,1), (3,1), (0,1)), 2 -> Array((4,1), (0,1), (1,1)), 3 -> Array((1,1)), 4 -> Array((5,1), (2,1)))

scala> res0.mapValues(_.toMap)
res1: scala.collection.immutable.Map[Int,scala.collection.immutable.Map[Int,Int]] = Map(0 -> Map(1 -> 1, 2 -> 1), 5 -> Map(4 -> 1), 1 -> Map(2 -> 1, 3 -> 1, 0 -> 1), 2 -> Map(4 -> 1, 0 -> 1, 1 -> 1), 3 -> Map(1 -> 1), 4 -> Map(5 -> 1, 2 -> 1))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 2011-05-20
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多