【发布时间】:2013-02-28 14:37:14
【问题描述】:
假设我有以下矩阵:
val grid = Array(
Array( 1, 2, 3, 4, 5, 6, 7, 8, 9),
Array(11,12,13, 14,15,16, 17,18,19),
Array(21,22,23, 24,25,26, 27,28,29),
Array(31,32,33, 34,35,36, 37,38,39),
Array(41,42,43, 44,45,46, 47,48,49),
Array(51,52,53, 54,55,56, 57,58,59),
Array(61,62,63, 64,65,66, 67,68,69),
Array(71,72,73, 74,75,76, 77,78,79),
Array(81,82,83, 84,85,86, 87,88,89)
)
我怎样才能,最好以函数的方式,将它们转换成这个矩阵:
val gridWithFields = Array(
Array(1,2,3, 11,12,13, 21,22,23),
Array(4,5,6, 14,15,16, 21,22,23),
Array(7,8,9, 17,18,19, 27,28,29),
...
)
*更新*
我做了一些基准测试,但不确定内存结果是否正确。无论如何,它们都在这里:
@maxmc for 的解决方案
周期中的 alg1:10 时间:2712683ns 内存:459572 周期中的 alg1:100 时间:914297ns 内存:458191 周期中的 alg1:1000 时间:85102ns 内存:457944 周期中的 alg1:10000 时间:68742ns 内存:457943@Daniel C. Sobral 解决方案
周期中的 alg2:10 时间:3747031ns 内存:458889 循环中的 alg2:100 时间:1796564ns 内存:457951 循环中的 alg2:1000 时间:186215ns 内存:457220 循环中的 alg2:10000 时间:122642ns 内存:456708@Or Peles 解决方案
周期中的 alg3:10 时间:741475ns 内存:457472 循环中的 alg3:100 时间:542181ns 内存:457914 循环中的 alg3:1000 时间:248020ns 内存:457911 循环中的 alg3:10000 时间:119105ns 内存:457919@Hbf 解决方案
周期中的 alg4:10 时间:179093ns 内存:457472 循环中的 alg4:100 时间:121072ns 内存:457069 循环中的 alg4:1000 时间:78123ns 内存:456719 循环中的 alg4:10000 时间:75948ns 内存:455913@Eastsun 解决方案
周期中的 alg5:10 时间:144037ns 内存:457512 循环中的 alg5:100 时间:40672ns 内存:457059 循环中的 alg5:1000 时间:42236ns 内存:456119 循环中的 alg5:10000 时间:46480ns 内存:455952我已经在 MacMini(2012) 上对其进行了测试。内存结果真的很奇怪,所以来源在这里,如果有一些不好的错误和反模式请告诉我=)https://github.com/Stimphonier/MatrixBench
【问题讨论】:
-
我想你的意思不是
Array(4,5,6, 14,15,16, 21,22,23),而是Array(4,5,6, 14,15,16, 24,25,26),最后的...实际上应该是每个内部数组后面的三个...,对吧? -
如果您快速对各种建议的解决方案进行基准测试(时间,也许还有内存消耗)并报告结果,那就太好了。应该不会花很长时间,而且肯定会对社区有所帮助。
-
@mhs 我做了一些基准测试,但不确定结果是否正确
-
@Alexlv: 你应该把
System.gc(); Thread.sleep(1000);System.gc(); Thread.sleep(1000)放在time方法的开头,以使内存结果更准确。