查找字母的数字位置
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
使用等效于 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