使用等效于foo
的函数在随机字母向量中查找字母的数字位置。
myletters = ["a","c","b","d","z"]
foo(myletters)
# [1,3,2,4,26]
答案 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)