【问题标题】:How can I sort this List in julia?如何在 Julia 中对这个列表进行排序?
【发布时间】:2018-12-29 04:53:32
【问题描述】:

请帮助我如何按第一个元素对该列表进行排序?

List = ([-180.0; -67.5], 0), ([270.0; -570.0], 0), ([180.0, -510.0], 1), ([27.15, -288.75], 1), ([-36.0, -244.5], 1)

sortList = ([-180.0; -67.5], 0), ([-36.0, -244.5], 1), ([27.15, -288.75], 1), ([180.0, -510.0], 1), ([270.0; -570.0], 0)  

谢谢

【问题讨论】:

    标签: julia julia-jump


    【解决方案1】:

    您无法对“列表”进行排序,因为它不是 Julia 中的列表

    它是一个元组的元组。

       $ julia
                   _
       _       _ _(_)_     |  Documentation: https://docs.julialang.org
      (_)     | (_) (_)    |
       _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
      | | | | | | |/ _` |  |
      | | |_| | | | (_| |  |  Version 1.0.3 (2018-12-18)
     _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
    |__/                   |
    
       julia> List=([-180.0; -67.5], 0),([270.0; -570.0], 0),([180.0, -510.0], 1),([27.15, -288.75], 1), ([-36.0, -244.5], 1)
    (([-180.0, -67.5], 0), ([270.0, -570.0], 0), ([180.0, -510.0], 1), ([27.15, -288.75], 1), ([-36.0, -244.5], 1))
    
       julia> List
       (([-180.0, -67.5], 0), ([270.0, -570.0], 0), ([180.0, -510.0], 1), ([27.15, -288.75], 1), ([-36.0, -244.5], 1))
    
       julia> typeof(List)
       NTuple{5,Tuple{Array{Float64,1},Int64}}
    

    上面写的很清楚

    Julia 有一个称为元组的内置数据结构,它与函数参数和返回值密切相关。元组是一个固定长度的容器,可以保存任何值,但不能修改(它是不可变的)。

    julia> mytuple=([-180.0; -67.5], 0),([270.0; -570.0], 0),([180.0, -510.0], 1),([27.15, -288.75], 1), ([-36.0, -244.5], 1)
    (([-180.0, -67.5], 0), ([270.0, -570.0], 0), ([180.0, -510.0], 1), ([27.15, -288.75], 1), ([-36.0, -244.5], 1))
    
    julia> array = [item for item in mytuple]
    5-element Array{Tuple{Array{Float64,1},Int64},1}:
    ([-180.0, -67.5], 0) 
    ([270.0, -570.0], 0) 
    ([180.0, -510.0], 1) 
    ([27.15, -288.75], 1)
    ([-36.0, -244.5], 1) 
    
    julia> sortedarray = sort(array,by=x -> x[1][1])
    5-element Array{Tuple{Array{Float64,1},Int64},1}:
     ([-180.0, -67.5], 0) 
     ([-36.0, -244.5], 1) 
     ([27.15, -288.75], 1)
     ([180.0, -510.0], 1) 
     ([270.0, -570.0], 0) 
    
    julia> resulttuple = tuple( sortedarray... )
    (([-180.0, -67.5], 0), ([-36.0, -244.5], 1), ([27.15, -288.75], 1), ([180.0, -510.0], 1), ([270.0, -570.0], 0))
    

    【讨论】:

    • 其实 Julia 默认是按字典顺序排序的,所以在这种情况下,如果要对第一个唯一的项目进行排序,写 Tuple(sort!(collect(mytuple))) 就足够了。如果您可能有重复,则需要 Steven 提出的方法Tuple(sort!(collect(mytuple), by=x->x[1][1]))(否则排序可能不稳定或失败,具体取决于您的数据结构将包含哪些其他元素)。
    猜你喜欢
    • 2013-08-18
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 2015-02-11
    • 2021-09-15
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    相关资源
    最近更新 更多