Sorting 按Julia中的多个元素对向量进行排序
我已经很好地阅读了Julia手册中的“排序功能”部分,并查看了一些类似的问题,这些问题已经在这个委员会上提出,但我认为我还没有找到我问题的答案。如果我错过了什么,我会道歉 本质上,我有一个向量向量,封闭向量包含整数。在本例中,每个封闭向量包含3个整数,但可以是任意数字。我想按第一个元素,第二个元素,第三个元素对封闭向量进行排序,等等 让我们从向量开始:Sorting 按Julia中的多个元素对向量进行排序,sorting,vector,julia,Sorting,Vector,Julia,我已经很好地阅读了Julia手册中的“排序功能”部分,并查看了一些类似的问题,这些问题已经在这个委员会上提出,但我认为我还没有找到我问题的答案。如果我错过了什么,我会道歉 本质上,我有一个向量向量,封闭向量包含整数。在本例中,每个封闭向量包含3个整数,但可以是任意数字。我想按第一个元素,第二个元素,第三个元素对封闭向量进行排序,等等 让我们从向量开始: v = [[3, 6, 1], [2, 2, 6], [1, 5, 9], [2, 1, 8], [3, 7, 9], [1, 1, 2
v = [[3, 6, 1], [2, 2, 6], [1, 5, 9], [2, 1, 8], [3, 7, 9],
[1, 1, 2], [2, 2, 2], [3, 6, 2], [1, 2, 5], [1, 5, 6],
[3, 7, 4], [2, 1, 4], [2, 2, 1], [3, 1, 2], [1, 2, 8]]
继续我真正想要的:
v = [[1, 1, 2], [1, 2, 5], [1, 2, 8], [1, 5, 6], [1, 5, 9],
[2, 1, 4], [2, 1, 8], [2, 2, 1], [2, 2, 2], [2, 2, 6],
[3, 1, 2], [3, 6, 1], [3, 6, 2], [3, 7, 4], [3, 7, 9]]
所以对火箭科学应该没有任何要求
我可以通过以下两种方式之一,通过封闭向量的第一个元素轻松地对向量进行排序:
v = sort(v, lt = (x, y) -> isless(x[1], y[2]))
或:
这两种方法得出的答案相同:
v = [[1, 5, 9], [1, 1, 2], [1, 2, 5], [1, 5, 6], [1, 2, 8],
[2, 2, 6], [2, 1, 8], [2, 2, 2], [2, 1, 4], [2, 2, 1],
[3, 6, 1], [3, 7, 9], [3, 6, 2], [3, 7, 4], [3, 1, 2]]
正如你们所看到的,我已经按照封闭向量的第一个元素进行了排序,但并没有按照后面的元素进行排序
那么,回到标题中的问题,是否有一种使用sort()
函数按多个元素排序的方法
实际上,我可以使用循环得到我想要的:
for i = 3:-1:1
v = sort(v, lt = (x, y) -> isless(x[i], y[i]))
end
或:
但是,我不想重新发明轮子,因此如果在
sort()
函数中有一种方法,我很想了解它。如果我正确理解了您的问题,您可以使用lexless
函数作为lt
关键字参数,这正是您想要的:
julia> sort(v, lt=lexless)
15-element Array{Array{Int64,1},1}:
[1, 1, 2]
[1, 2, 5]
[1, 2, 8]
[1, 5, 6]
[1, 5, 9]
[2, 1, 4]
[2, 1, 8]
[2, 2, 1]
[2, 2, 2]
[2, 2, 6]
[3, 1, 2]
[3, 6, 1]
[3, 6, 2]
[3, 7, 4]
[3, 7, 9]
编辑:我刚刚检查过这是Julia 0.6的解决方案。在Julia 0.7中,您可以简单地编写:
julia> sort(v)
15-element Array{Array{Int64,1},1}:
[1, 1, 2]
[1, 2, 5]
[1, 2, 8]
[1, 5, 6]
[1, 5, 9]
[2, 1, 4]
[2, 1, 8]
[2, 2, 1]
[2, 2, 2]
[2, 2, 6]
[3, 1, 2]
[3, 6, 1]
[3, 6, 2]
[3, 7, 4]
[3, 7, 9]
如果我正确理解了您的问题,您可以使用
lexless
函数作为lt
关键字参数,它完全符合您的要求:
julia> sort(v, lt=lexless)
15-element Array{Array{Int64,1},1}:
[1, 1, 2]
[1, 2, 5]
[1, 2, 8]
[1, 5, 6]
[1, 5, 9]
[2, 1, 4]
[2, 1, 8]
[2, 2, 1]
[2, 2, 2]
[2, 2, 6]
[3, 1, 2]
[3, 6, 1]
[3, 6, 2]
[3, 7, 4]
[3, 7, 9]
编辑:我刚刚检查过这是Julia 0.6的解决方案。在Julia 0.7中,您可以简单地编写:
julia> sort(v)
15-element Array{Array{Int64,1},1}:
[1, 1, 2]
[1, 2, 5]
[1, 2, 8]
[1, 5, 6]
[1, 5, 9]
[2, 1, 4]
[2, 1, 8]
[2, 2, 1]
[2, 2, 2]
[2, 2, 6]
[3, 1, 2]
[3, 6, 1]
[3, 6, 2]
[3, 7, 4]
[3, 7, 9]
我仍在运行0.6.2,而您的第一个方法运行良好。我知道必须有一个简单的解决方案,尽管我刚刚回到手册中,在“排序功能”部分找不到
lt=lexless
的参考。非常感谢!看到V0.7的改进也很好。我仍然在运行0.6.2,您的第一个方法运行得很好。我知道必须有一个简单的解决方案,尽管我刚刚回到手册中,在“排序功能”部分找不到lt=lexless
的参考。非常感谢!看到V0.7的改进也很好。