0

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

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

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

我有python执行此操作的代码,但需要 3-4 天才能完成所有 17 个起始数字的最多 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)我的方式通过排列查找 a 中的数量,方法是breeze.linalg.DenseMatrix使用两个值来索引我在下面提供的矩阵并将收集的数量相加通过使用两个值对矩阵进行索引sliding(从每个值中减去 1 以说明基于 0 的索引)。

此时,只需收集信息(starting_locationcombination和)best_permutationamount构造嵌套的HashMap. scala 2.11.8如果有什么不同,我正在使用。

矩阵: 见这里。 程序:见这里。

4

0 回答 0