ruby - 在 Ruby 中拆分一串具有不同数字大小的数字

标签 ruby string split

我想弄清楚是否有一种方法可以拆分包含具有不同数字大小的数字的字符串,而不必使用 if/else 语句。有没有一种直接的方法可以做到这一点。这是一个示例字符串:

"123456789101112131415161718192021222324252627282930"

这样它就可以被拆分成一个包含 1-9 和 10-30 的数组,而不必先将数组拆分成单个数字,将它分开,找到 9,然后迭代组合 9 之后的每 2 个元素。

这是我目前要澄清的方式:

single_digits, double_digits = [], []
string = "123456789101112131415161718192021222324252627282930".split('')

single_digits << string.slice!(0,9)
single_digits.map! {|e| e.to_i}
string.each_slice(2) {|num| double_digits << num.join.to_i}

这会给我:

single_digits = [1,2,3,4,5,6,7,8,9]
double_digits = [10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]

最佳答案

只要你能确定每一个数都大于它的前导数且大于零,并且从一位数到最大值的每一个数的长度至少被表示一次,你就可以这样写

def split_numbers(str)
  numbers = []
  current = 0
  str.each_char do |ch|
    current = current * 10 + ch.to_i
    if numbers.empty? or current > numbers.last
      numbers << current
      current = 0
    end
  end
  numbers << current if current > 0
  numbers
end

p split_numbers('123456789101112131415161718192021222324252627282930')

输出

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]

对于 Anon 的 192837453572 示例,我们得到

[1, 9, 28, 37, 45, 357, 2]

关于ruby - 在 Ruby 中拆分一串具有不同数字大小的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17767591/

相关文章:

ruby - Docker Ruby Rack Redis 队列

Java:字符串拆分():我希望它在末尾包含空字符串

java正则表达式用于分割字符串

ruby - 指南针 watch 错误 - Mac OS X

ruby - 如何使用 FactoryBot 定义关联工厂?

java - 无法正确地将数组转换为字符串列表

objective-c - 如何确定 NSFont 是否安装在 Objective-C 的 Mac OSX 机器上?

java - java - 如何在Java中获取没有扩展名的文件对象的名称?

ruby-on-rails - rails : Pass parameter from view to controller

c++ - 创建带变量的字符串