Ruby内置方法来获取字母系列中字母的位置?

vik*_*sad 1 ruby

输入: str = "stackoverflow"

输出: [19 20 1 3 11 15 22 5 18 6 12 15 23]

我们有什么方法可以获取 ruby​​ 中字母的位置吗?

这样我就可以使用类似str.chars.map { |al| al.some_method }.

str.chars = ["s", "t", "a", "c", "k", "o", "v", "e", "r", "f", "l", "o", "w"]

AJF*_*day 6

你可以这样做。我会使用String#charswhich 返回字符串中每个字符的 ASCII 数字。

'abcdggg'.bytes
# => [97, 98, 99, 100, 103, 103, 103] 
Run Code Online (Sandbox Code Playgroud)

如您所见,字母表是连续的,每个字母都比前一个高一个。您可以通过从数字中取 96 来获得它在字母表中的位置。

请注意,大写字母位于不同的位置,但我们可以使用String#downcase.

要获取字符串中的所有字母位置(如果它只有字母),我们可以编写此方法。

def alphabet_positions(string)
  string.downcase.bytes.map{|b| b - 96}
end
Run Code Online (Sandbox Code Playgroud)

如果任何字符不是字母,这将出乎意料地起作用。


mrz*_*asa 5

您可以使用字母表中字母的位置构建一个哈希,然后查询该哈希:

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]
Run Code Online (Sandbox Code Playgroud)