如何使用循环将项目推送到红宝石数组

时间:2019-01-06 16:38:41

标签: ruby ruby-on-rails-4

我正在尝试使用循环创建日期数组。但是循环只推一个日期,当我查询数组时,我看到它不是数组,而是列表。帮助。

date1 = '01-01-2019'.to_date
dates = []
count = 0
repeat = 3

while (count < repeat)
 count += 1
 date2 = date1 + count.month
 dates << date2
 puts dates
end

预期结果应该为 [01-02-2019、01-03-2019、01-04-2019]

但是,如果我使用Rails控制台,我得到的只是列表中的日期。如果我在控制器中 加薪date.inspect ,我只会得到 01-02-2019

我该如何解决?

2 个答案:

答案 0 :(得分:1)

从您的编码风格来看,您似乎是Ruby的新手。更像Ruby的方法是:

start_date = '01-01-2019'.to_date
repeat     = 3

dates = 1.upto(repeat).map { |count| start_date + count.months }
# or
dates = (1..repeat).map { |count| start_date + count.months }

然后使用以下命令打印日期数组:

puts dates

据我所知,您提供的代码应该可以正常工作。请记住,puts会在多行中打印数组。如果要在一行上显示数组的内容,请使用p。区别在于puts使用to_s方法,而p使用inspect方法。传递给puts的数组将被展平并视为多个参数。每个参数都有自己的一行。

puts [1, 2]
# 1
# 2
#=> nil

p [1, 2]
# [1, 2]
#=> [1, 2]

答案 1 :(得分:0)

puts dates替换为puts "#{dates}"。 它将按预期方式打印数组,例如[01-02-2019,01-03-2019,01-04-2019]。