将字母序列映射到整数
Map alphabetic sequence to integer
我想实现一个映射到整数的字母代码。
例如:
A = 1
B = 2
C = 3
...
Z = 26
AA = 27
AB = 28
...
BA = 53
...
ZZ = 702
执行此映射的最佳方法是什么,以便我可以轻松地将字母代码转换为数字,反之亦然?
('A'..'ZZ').to_a[694] # "ZS"
('A'..'ZZ').to_a.index("ZS") # 694
Ruby 数组索引从 0 开始。如果你真的想让它从 1 开始,你可以这样做:
('A'..'ZZ').to_a.unshift(nil)[694] # "ZR"
('A'..'ZZ').to_a.unshift(nil).index("ZR") # 694
你可以这样实现。
str_num_map = lambda do |val|
arr = ('A'..'ZZ').to_a
val.is_a?(String) ? (arr.index(val) + 1) : (arr[val-1])
end
str_num_map.call(1) # => 'A'
str_num_map.call('ZZ') # => 702
我想实现一个映射到整数的字母代码。
例如:
A = 1
B = 2
C = 3
...
Z = 26
AA = 27
AB = 28
...
BA = 53
...
ZZ = 702
执行此映射的最佳方法是什么,以便我可以轻松地将字母代码转换为数字,反之亦然?
('A'..'ZZ').to_a[694] # "ZS"
('A'..'ZZ').to_a.index("ZS") # 694
Ruby 数组索引从 0 开始。如果你真的想让它从 1 开始,你可以这样做:
('A'..'ZZ').to_a.unshift(nil)[694] # "ZR"
('A'..'ZZ').to_a.unshift(nil).index("ZR") # 694
你可以这样实现。
str_num_map = lambda do |val|
arr = ('A'..'ZZ').to_a
val.is_a?(String) ? (arr.index(val) + 1) : (arr[val-1])
end
str_num_map.call(1) # => 'A'
str_num_map.call('ZZ') # => 702