我想弄清楚是否有一种方法可以拆分包含具有不同数字大小的数字的字符串,而不必使用 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/