有没有办法使用 Julia 的 readdir() 来排序目录?

Woj*_*Woj 5 julia

我有超过一千个名为LOGS_A1, LOGS_A2, LOGS_A3 , ..., LOGS_A16281` 的文件,我想按该顺序列出这些文件

cwd = pwd()
ParentDir = joinpath(cwd,"LOGS_A")
dirs = readdir(ParentDir, join=true, sort=true)
Run Code Online (Sandbox Code Playgroud)

但是,它按字母顺序对条目进行排序:

LOGS_A999
LOGS_A9990
LOGS_A9991
LOGS_A9992
LOGS_A9993
LOGS_A9994
LOGS_A9995
LOGS_A9996
LOGS_A9997
LOGS_A9998
LOGS_A9999
Run Code Online (Sandbox Code Playgroud)

有没有办法对其进行排序,使其从 1 到 16281 列出?

Bog*_*ski 0

这是你想要的吗?

julia> src = ["LOGS_A1",
              "LOGS_A10",
              "LOGS_A11",
              "LOGS_A2",
              "LOGS_A3",
              "LOGS_A4",
              "LOGS_A5",
              "LOGS_A6",
              "LOGS_A7",
              "LOGS_A8",
              "LOGS_A9"];

julia> sort(src, by = x -> parse(Int, chop(x, head=6, tail=0)))
11-element Array{String,1}:
 "LOGS_A1"
 "LOGS_A2"
 "LOGS_A3"
 "LOGS_A4"
 "LOGS_A5"
 "LOGS_A6"
 "LOGS_A7"
 "LOGS_A8"
 "LOGS_A9"
 "LOGS_A10"
 "LOGS_A11"
Run Code Online (Sandbox Code Playgroud)

我用chop在这种情况下使用它似乎最简单,因为我知道你到处都有相同的前缀。

另一种选择是:

julia> src[sortperm(parse.(Int, chop.(src, head=6, tail=0)))]
11-element Array{String,1}:
 "LOGS_A1"
 "LOGS_A2"
 "LOGS_A3"
 "LOGS_A4"
 "LOGS_A5"
 "LOGS_A6"
 "LOGS_A7"
 "LOGS_A8"
 "LOGS_A9"
 "LOGS_A10"
 "LOGS_A11"
Run Code Online (Sandbox Code Playgroud)

这稍微快一些,但编写起来更复杂(并且可能在您的用例中速度并不重要)。