我有一个非唯一值的矩阵(或多维数组),如下所示:
@Override
protected void onDestroy() {
super.onDestroy();
resetPlayView();
}
我想对此矩阵的一行进行排序,但其他行应重新排序,以使列保持组织状态。
var matrix = [
[1, 3, 2, 4, 1],
[2, 4, 1, 3, 2],
[4, 3, 2, 1, 4]
]
如果可能的话,我更喜欢lodash解决方案。
答案 0 :(得分:5)
您可以使用带索引的数组,并使用matrix[0]
的值对其进行排序。然后使用已排序的元素构建一个新数组。
var matrix = [[1, 3, 2, 4, 1], [2, 4, 1, 3, 2], [4, 3, 2, 1, 4]],
indices = matrix[0].map((_, i) => i);
indices.sort((a, b) => matrix[0][a] - matrix[0][b]);
result = matrix.map(a => indices.map(i => a[i]));
console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:3)
使用lodash,您可以使用zip
转置矩阵,使用给定sortBy
个数字row
对其进行排序,然后将其转置回来:
_.zip.apply(_, _.sortBy(_.zip.apply(_, matrix), row))
var matrix = [
[1, 3, 2, 4, 1],
[2, 4, 1, 3, 2],
[4, 3, 2, 1, 4]
];
var row = 0;
result = _.zip.apply(_, _.sortBy(_.zip.apply(_, matrix), row));
console.log(result.join('\n'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.16.4/lodash.min.js"></script>
使用rest parameter syntax,您也可以将其写为:
_.zip(..._.sortBy(_.zip(...matrix), row));