Scala中的动态Json密钥

时间:2017-08-08 23:48:46

标签: scala scala-collections spray-json lift-json play-json

我是scala的新手(来自python),我正在尝试创建一个具有动态密钥的Json对象。我想使用一些起始编号作为顶级密钥,然后将涉及该编号的组合作为二级密钥。

通过阅读play-json文档/示例,我已经了解了如何构建这些嵌套结构。虽然这适用于顶级键(其中只有17个),但这是一个组合问题,并且功率集包含~130k组合,这将是二级键,因此列出该结构是不可行的出。我还看到了case class用于结构,但参数名称成为那些不是我正在寻找的实例中的关键。

目前,我正在考虑将HashMapsMultiMap特征一起使用,以便我可以将多个组合映射到相同的原始起始编号,然后二级密钥将是组合本身。

我有python代码执行此操作,但是对于所有17个起始号码,需要3-4天才能完成最多9个数字组合。理想的最终格式如下所示。

考虑到使用不可变结构的目标,也许在scala中不可能做到。我想在输出字符串上使用正则表达式也可能是一个选项。我愿意接受有关数据结构的任何解决方案,以保存信息以及如何解决问题。谢谢!

{
  "2": {
    "(2, 3, 4, 5, 6)": {
        "best_permutation": "(2, 4, 3, 5, 6)",
        "amount": 26.0
      },
    "(2, 4, 5, 6)": {
      "best_permutation": "(2, 5, 4, 6)",
      "amount": 21.0
    }
  },
  "3": {
    "(3, 2, 4, 5, 6)": {
      "best_permutation": "(3, 4, 2, 5, 6)",
      "amount": 26.0
    },
    "(3, 4, 5, 6)": {
      "best_permutation": "(3, 5, 4, 6)",
      "amount": 21.0
    }
  }
}

修改 除了我用作查找表的矩阵之外,没有真正的数据源。我已经发布了我正在使用的查找表的链接和程序,如果它可能有帮助,但实际上,我在代码中自己生成内容。

对于给定的组合,我有一个基本上取组合的第一个值(它是起点)的函数,然后使用该组合的尾部来生成置换。

之后我将起始位置添加到每个排列的前面,然后使用sliding(2)通过排列查找breeze.linalg.DenseMatrix中的金额,使用这两个值索引我在下面提供的矩阵,并通过将矩阵与两个sliding值进行索引(从每个值中减去1以考虑基于0的索引)来汇总收集的数量。

此时,只需收集信息(starting_locationcombinationbest_permutationamount)并构建嵌套{{1} }。如果它有任何不同,我正在使用HashMap

MATRIX: see here.方案: see here.

0 个答案:

没有答案