生成所有字母和数字的哈希值

Ali*_*nor 7 ruby ruby-hash

使用 ruby​​,如何对字母表中的每个字母(键)和 1-26(值)进行哈希?

我需要创建一个哈希,其中键为“a”到“z”,值为 1 到 26,但我不想自己编写alphabet = {'a'=>1,'b'=>2,....'y'=>25,'z'=>26}

我的代码中需要这个来打印alphabet[i] if alphabet.key?(i)

eng*_*nky 9

('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- 返回一个Enumerator
  • with_index(1)- 返回Enumerator初始 Range 的每个元素及其索引(从 1 开始),例如[["a",1],["b",2],...]
  • to_h- 将 转换EnumeratorHash

更新

有点深奥,但这也行

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)


mec*_*cov 7

有两个范围,zip并且to_h

('a'..'z').zip(1..26).to_h
Run Code Online (Sandbox Code Playgroud)


max*_*max 5

Hash[('a'..'z').zip(1.upto(26))] 
Run Code Online (Sandbox Code Playgroud)