输入:str = "stackoverflow"
输出:[19 20 1 3 11 15 22 5 18 6 12 15 23]
我们有什么方法可以获取字母在红宝石中的位置?
这样我就可以使用str.chars.map { |al| al.some_method }
之类的东西。
str.chars = ["s", "t", "a", "c", "k", "o", "v", "e", "r", "f", "l", "o", "w"]
答案 0 :(得分:4)
您可以执行此操作。我会使用curl -s -H "Content-Type: application/x-ndjson" -XPOST localhost:9200/_bulk --data-binary "@test2.json"; echo
来返回字符串中每个字符的ASCII码。
String#chars
如您所见,字母是连续的,每个字母比上一个字母高一个。您可以通过从数字中取96来获得字母在字母表中的位置。
请注意,大写字母位于不同的位置,但是我们可以使用'abcdggg'.bytes
# => [97, 98, 99, 100, 103, 103, 103]
来解决。
要获取字符串中所有字母位置(如果只有字母),我们可以编写此方法。
String#downcase
如果任何字符都不是字母,这将无法正常工作。
答案 1 :(得分:3)
您可以这样做:
def position(letter)
letter.upcase.ord - 'A'.ord + 1
end
然后:
chars = ["s", "t", "a", "c", "k", "o", "v", "e", "r", "f", "l", "o", "w"]
chars.map do |char| position(char) end
=> [19, 20, 1, 3, 11, 15, 22, 5, 18, 6, 12, 15, 23]
答案 2 :(得分:2)
您可以使用字母在字母表中的位置构建哈希,然后查询该哈希:
indexes = ('a'..'z').each_with_index.map{|l,i| [l, i+1]}.to_h
"stackoverflow".chars.map{|l| indexes[l]}
# => [19, 20, 1, 3, 11, 15, 22, 5, 18, 6, 12, 15, 23]
答案 3 :(得分:0)
下面将为您提供所需的结果。
foo
答案 4 :(得分:0)
使用each_char
比chars
更好,因为后者会创建一个立即抛出的数组。
str.each_char.map{|al| al.ord - ?a.ord + 1}
# => [19, 20, 1, 3, 11, 15, 22, 5, 18, 6, 12, 15, 23]