输入: 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"]
你可以这样做。我会使用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)
如果任何字符不是字母,这将出乎意料地起作用。
您可以使用字母表中字母的位置构建一个哈希,然后查询该哈希:
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)
| 归档时间: |
|
| 查看次数: |
3911 次 |
| 最近记录: |