首页 > 解决方案 > 如何使用循环将项目推送到 ruby​​ 数组

问题描述

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

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 控制台,我得到的只是列表中的日期。如果我在控制器中提出 dates.inspect,我只会得到01-02-2019

我怎样才能解决这个问题?

标签: rubyruby-on-rails-4

解决方案


从您的编码风格看来,您对 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]

推荐阅读