对矩阵中的列进行排序

时间:2017-06-07 15:30:30

标签: javascript sorting matrix lodash

我有一个非唯一值的矩阵(或多维数组),如下所示:

@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解决方案。

2 个答案:

答案 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));