我是scala
的新手(来自python
),我正在尝试创建一个具有动态密钥的Json对象。我想使用一些起始编号作为顶级密钥,然后将涉及该编号的组合作为二级密钥。
通过阅读play-json
文档/示例,我已经了解了如何构建这些嵌套结构。虽然这适用于顶级键(其中只有17个),但这是一个组合问题,并且功率集包含~130k组合,这将是二级键,因此列出该结构是不可行的出。我还看到了case class
用于结构,但参数名称成为那些不是我正在寻找的实例中的关键。
目前,我正在考虑将HashMaps
与MultiMap
特征一起使用,以便我可以将多个组合映射到相同的原始起始编号,然后二级密钥将是组合本身。
我有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_location
,combination
,best_permutation
和amount
)并构建嵌套{{1} }。如果它有任何不同,我正在使用HashMap
。