在电子表格中,我有像“F14”、“BE5”或“ALL1”这样的单元格。我在变量中有第一部分,即列坐标,我想将其转换为基于 0 的整数列索引。
我如何在 Ruby 中做到这一点,最好以优雅的方式?
我可以使用蛮力方法来做到这一点:我可以想象遍历所有字母,将它们转换为 ASCII 并添加到结果中,但我觉得应该有更优雅/直接的东西。
编辑 : 示例:为了简化我只谈列坐标(字母)。因此,在第一种情况下(F14)我有“F”作为输入,我希望结果是 5。在第二种情况下,我有“BE”作为输入,我希望得到 56,对于“ALL”我想得到999.
最佳答案
不确定这是否比您已有的代码更清晰,但它确实具有处理任意数量字母的优势:
class String
def upcase_letters
self.upcase.split(//)
end
end
module Enumerable
def reverse_with_index
self.map.with_index.to_a.reverse
end
def sum
self.reduce(0, :+)
end
end
def indexFromColumnName(column_str)
start = 'A'.ord - 1
column_str.upcase_letters.map do |c|
c.ord - start
end.reverse_with_index.map do |value, digit_position|
value * (26 ** digit_position)
end.sum - 1
end
我在
String
和 Enumerable
中添加了一些方法,因为我认为它使代码更具可读性,但是如果您不喜欢那种东西,您可以内联这些或在其他地方定义它们。关于ruby - 如何将电子表格 "letternamed"列坐标转换为整数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24921075/