0
寻找使用等效于foo
的函数在随机字母向量中查找字母的数字位置。Julia:找到字母的数字位置
myletters = ["a","c","b","d","z"]
foo(myletters)
# [1,3,2,4,26]
寻找使用等效于foo
的函数在随机字母向量中查找字母的数字位置。Julia:找到字母的数字位置
myletters = ["a","c","b","d","z"]
foo(myletters)
# [1,3,2,4,26]
编辑:如果你从'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
我想出了几分复杂的解决方案:
[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)
我很抱歉。我最初的例子不够清楚。我需要保持信件的主要顺序。我已经更新了它。 – fsmart
哦,好的。你确定你的所有信件都会在'a'中:'z'吗? –
那么,我想任意的映射解决方案会有所帮助。这让我想起前段时间我在文档中看到的字典有一些东西('Dict')。 – fsmart