将数组中的整数拆分为Ruby

时间:2017-06-27 23:20:04

标签: arrays ruby

我试图收集用户的输入,将输入作为整数存储在数组中,然后迭代每隔一个数字,从第二个到最后一个,然后再取这些数字并乘以2.然后,我将产品的各个数字相加,但我将该数学结果存储为整数

这是我的代码:

# Prompt user for input

print "Number: "
array = []
card = gets.to_i
array << card


# Prompt the user until the number is valid

until card.is_a?(Integer) && card.positive? && card.to_s.length > 10
  print "Retry: "
  card = gets.to_i
  array << card
end

array = array.to_s.scan(/\d/).map(&:to_i) # split number in array by digit


i = -2 # starting the loop at second to last digit
t = ((array.length)/2).ceil # number of times to iterate through the array length & roundup
$sum = 0

t.times do #go through the array as many times as digits needed, starting 2nd to last
  $sum += ((array[i]) * 2).digits
  i -= 2
end

puts $sum

这给了我控制台错误:

Array can't be coerced into Integer (TypeError)

我也尝试将产品的各个数字放入一个像这样的新数组中

final_array = []

t.times do #go through the array as many times as digits needed, starting 2nd to last
  final_array << ((array[i]) * 2).digits.to_i
  i -= 2
end

但这给了我错误undefined method to_i for [2]:Array

我知道有另一种方法可以使用%来解决这个问题,但我试图用数组来解决这个问题。希望有人可以帮忙!

2 个答案:

答案 0 :(得分:0)

更改此行:

final_array << ((array[i]) * 2).digits.to_i

通过这个:

final_array += ((array[i]) * 2).digits

答案 1 :(得分:0)

您可以使用迭代器和数组切片执行此操作。

首先将数组从带有切片(ruby array slice method)的最后一个(-1)元素中取出,然后反转该切片。

 a = [1,2,3,4,5]
 b = a.reverse[1..-1]
  => [4, 3, 2, 1]

接下来,您只需要新数组的索引元素,您可以通过迭代数组并检查它的索引是否为偶数来找到它。 each_with_index方法可以帮助您(Ruby enumerable each_with_index method)。如果索引是偶数,则将该索引处的值存储在另一个数组

 c = []
 b.each_with_index {|n,i| c << n if i.even? }
 c
  => [4, 2]

然后使用数组inject方法进行数学运算(在此详细解释 - SO discussion of Ruby inject)。

 c.inject(0) {|sum, n| sum + (n * 2) }
  => 12

这种方法允许你跳过搞乱计数器变量并在数组上向后工作,只是坚持使用Ruby迭代器。