使用 ruby,如何对字母表中的每个字母(键)和 1-26(值)进行哈希?
我需要创建一个哈希,其中键为“a”到“z”,值为 1 到 26,但我不想自己编写alphabet = {'a'=>1,'b'=>2,....'y'=>25,'z'=>26}
我的代码中需要这个来打印alphabet[i] if alphabet.key?(i)
('a'..'z').each.with_index(1).to_h
#=> {"a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5, "f"=>6, "g"=>7, "h"=>8, "i"=>9, "j"=>10,
# "k"=>11, "l"=>12, "m"=>13, "n"=>14, "o"=>15, "p"=>16, "q"=>17, "r"=>18, "s"=>19,
# "t"=>20, "u"=>21, "v"=>22, "w"=>23, "x"=>24, "y"=>25, "z"=>26}
Run Code Online (Sandbox Code Playgroud)
脚步:
('a'..'z')- 创建Range字母“a”到“z”(含)each- 返回一个Enumeratorwith_index(1)- 返回Enumerator初始 Range 的每个元素及其索引(从 1 开始),例如[["a",1],["b",2],...]to_h- 将 转换Enumerator为Hash更新:
有点深奥,但这也行
enum = Enumerator.produce('a') {|e| e == 'z' ? raise(StopIteration) : e.succ }.tap do |e|
e.define_singleton_method(:[]) {|elem| find_index(elem)&.+(1) }
e.define_singleton_method(:to_h) { with_index(1).to_h }
end
enum['w']
#=> 23
enum['W']
#=> nil
enum.to_h
#=> {"a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5, "f"=>6, "g"=>7, "h"=>8, "i"=>9, "j"=>10,
# "k"=>11, "l"=>12, "m"=>13, "n"=>14, "o"=>15, "p"=>16, "q"=>17, "r"=>18, "s"=>19,
# "t"=>20, "u"=>21, "v"=>22, "w"=>23, "x"=>24, "y"=>25, "z"=>26}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
553 次 |
| 最近记录: |