Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 按Julia中的多个元素对向量进行排序_Sorting_Vector_Julia - Fatal编程技术网

Sorting 按Julia中的多个元素对向量进行排序

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

我已经很好地阅读了Julia手册中的“排序功能”部分,并查看了一些类似的问题,这些问题已经在这个委员会上提出,但我认为我还没有找到我问题的答案。如果我错过了什么,我会道歉

本质上,我有一个向量向量,封闭向量包含整数。在本例中,每个封闭向量包含3个整数,但可以是任意数字。我想按第一个元素,第二个元素,第三个元素对封闭向量进行排序,等等

让我们从向量开始:

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的改进也很好。