gpt4 book ai didi

arrays - 对多个索引的元组数组进行排序,在 Julia 中只有一个反转

转载 作者:行者123 更新时间:2023-12-04 00:14:54 27 4
gpt4 key购买 nike

我有一个 Array{Tuple{Float64, Int}},我想根据第一个条目以相反的顺序对其进行排序,并根据第二个条目以直接的顺序对其进行排序。

示例:如果 a=[(1.0,2),(3.0,1),(2.0,3),(2.0,2)],在调用 sort!(a , ...),我想得到 [(3.0,1),(2.0,2),(2.0,3),(1.0,2)] 其中第一个维度从大到小排序,当两个条目相等时,第二个维度从小到大排序。

最佳答案

有几种方法可以自定义排序顺序,使用 ltby 关键字参数到 sort(或 排序!):

  1. 使用 lt:为元组定义一个自定义的“小于”运算符。您在这个比较运算符中或多或少地按照您以简单方式表达的顺序进行编码:
julia> a=[(1.0,2),(3.0,1),(2.0,3),(2.0,2)];

julia> mylt((x1,y1), (x2,y2)) = x1>x2 || (x1==x2 && y1<y2)
mylt (generic function with 1 method)

julia> sort(a, lt=mylt)
4-element Array{Tuple{Float64,Int64},1}:
(3.0, 1)
(2.0, 2)
(2.0, 3)
(1.0, 2)

2.使用by:定义一个应用于数组中每个元素的转换,以及元素的排序方式:

julia> x_desc_then_y_asc((x,y)) = (-x, y)
x_desc_then_y_asc (generic function with 1 method)

julia> sort(a, by=x_desc_then_y_asc)
4-element Array{Tuple{Float64,Int64},1}:
(3.0, 1)
(2.0, 2)
(2.0, 3)
(1.0, 2)

那个变体中的辅助函数太短了,我可以用它做一个匿名函数:

julia> sort(a, by=((x,y),)->(-x,y))
4-element Array{Tuple{Float64,Int64},1}:
(3.0, 1)
(2.0, 2)
(2.0, 3)
(1.0, 2)

PS:请注意在所有这些示例中如何使用“元组解构”以避免显式索引到元组中。

关于arrays - 对多个索引的元组数组进行排序,在 Julia 中只有一个反转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64767942/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com