我有16列的表,前三列是输入列。我想一次按照前三列对整张表进行排序。
T = table(a1, a2, a3, ..., a16)
所有a1
,a2
和a3
都将按升序排序。
例如:
a1 = [6 3 9 6 3 9 6 5]'
a2 = [7 8 2 3 7 7 6 7]'
a3 = [9 2 3 3 4 3 7 4]'
输出应为:
a1 = [3 3 5 6 6 6 9 9]'
a2 = [7 8 7 3 6 7 2 7]'
a3 = [4 2 4 3 7 9 3 3]'
答案 0 :(得分:1)
我认为您正在寻找的功能是排序。 e.g。
ans =
8×3 table
a1 a2 a3
__ __ __
3 7 4
3 8 2
5 7 4
6 3 3
6 6 7
6 7 9
9 2 3
9 7 3
您提供要排序的列的向量。
这会给你
@AllArgsConstructor(suppressConstructorProperties = true)
,首先按第1列排序,然后按第2列排序,最后按第3列排序。
答案 1 :(得分:0)
如果我完全理解这个问题,我也不确定。如果我理解正确,您希望按第一列排序,如果第一列中有相同的值,请考虑第二列......
解决这个问题的一种方法(假设只有正值)就是像这样利用int / float / double的范围:
a1 = [6 3 9 6 3 9 6 5]';
a2 = [7 8 2 3 7 7 6 7]';
a3 = [9 2 3 3 4 3 7 4]';
[~,order] = sort((a1 * max(a2+1) + a2 ) * max(a3+1) + a3);
这会给你想要的结果:
[a1(order)'; a2(order)'; a3(order)']
3 3 5 6 6 6 9 9
7 8 7 3 6 7 2 7
4 2 4 3 7 9 3 3
使用max(abs(...))可能会允许您使用负值。然而,这种方法是务实的但不太好,我认为......