查找字母的数字位置

Find numeric placement of letters

使用等效于 foo.

的函数寻找随机字母向量中字母的数字位置
myletters = ["a","c","b","d","z"]

foo(myletters)
# [1,3,2,4,26]

我想出了一个有点复杂的解决方案:

[reshape((1:26)[myletters[i] .== string.('a':'z')],1)[1] for i=1:length(myletters)]

或使用map

map(x -> reshape((1:26)[x .== string.('a':'z')],1)[1], myletters)

编辑:如果您正在寻找距 'a' 的数值距离,这里有一个解决方案:

julia> Int.(first.(["a","c","b","d","z"])) - Int('a') + 1
5-element Array{Int64,1}:
  1
  3
  2
  4
 26

它将优雅地处理 unicode(那些只是后面的代码点,因此会有更大的值)和更长的字符串(只看第一个字符)。大写字母、数字和一些符号将显示为负数,因为它们的代码点位于 a.

之前

上一个答案:我认为您正在寻找 sortperm。它为您提供了一个索引向量,如果您用它索引回原始数组,它将按排序顺序排列。

julia> sortperm(["a","c","b","d"])
4-element Array{Int64,1}:
 1
 3
 2
 4