查找字母的数字位置

时间:2017-09-14 15:51:03

标签: julia letter

使用等效于foo的函数在随机字母向量中查找字母的数字位置。

myletters = ["a","c","b","d","z"]

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

2 个答案:

答案 0 :(得分:4)

修改:如果您正在寻找'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

答案 1 :(得分:0)

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

[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)