ruby - 创建一个从 A 开始到 Z 之后结束的一系列字母的数组,即(B 到 AC)

标签 ruby string range

我正在使用 Roo Gem,并希望根据标准 A1 语法从电子表格中提取数据。

我在电子表格中有超出 Z 的列,因此 Excel 会处理整个 AA、AB、AC 列位置。

我想为 W 到 AH 列创建一个数组。

Ruby 似乎不喜欢上限超出 Z 但还没有从 A 开始??

关于如何("B".."AC").to_a 而不是[] 的任何想法

这是 irb 中的基本问题。

("A".."Z").to_a
#=> ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
("B".."Z").to_a
#=> ["B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
("A".."AC").to_a
#=> ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC"]
("B".."AC").to_a
#=> []

最佳答案

这个怎么样?

("A".."AC").to_a.drop(1)

您可以删除任意数量的元素,它只涉及创建 1 个范围和 1 个数组。

The integer could potentially be substituted for someting that returns the position of the letter in the alphabet.

class Array
  def from(column)
    drop(find_index(column).to_i)
  end
end

("A".."AC").to_a.from('F')
#=> ["F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC"]

直接使用 Range 类,感谢@sagarpandya82

class Range
  def from(column)
    to_a.drop(find_index(column).to_i)
  end
end

("A".."AC").from('F')
#=> ["F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC"]

关于ruby - 创建一个从 A 开始到 Z 之后结束的一系列字母的数组,即(B 到 AC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44558865/

相关文章:

ruby-on-rails - 如何在不渲染的情况下从 ERB 代码块中产生?

ruby - Ruby 中的访问者模式,还是只使用 block ?

c - 指向字符串的指针数组

16 位数据类型范围的混淆

perl - 我如何在 bash 或 Perl 中比较一个数字和一个范围?

ruby-on-rails - ruby 包安装需要 : no such files to load error

c - 如何在 C 中创建随机字符串数组?

python - 计算字符串中的字符数,创建一个数据框列?

Java - 最小值和最大值之间的限制数

ruby-on-rails - 如何通过保持约定来重用 RABL 部分模板?