在电子表格中,我有像“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

我在 StringEnumerable 中添加了一些方法,因为我认为它使代码更具可读性,但是如果您不喜欢那种东西,您可以内联这些或在其他地方定义它们。

关于ruby - 如何将电子表格 "letternamed"列坐标转换为整数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24921075/

10-16 00:18