ruby - 如何使用循环将项目推送到 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。
我怎样才能解决这个问题?
解决方案
从您的编码风格看来,您对 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]
推荐阅读
- java - 在Java中读取括号内的内容?
- sql - 如何让最后一行在 Oracle SQL 中显示聚合函数
- r - 按观察出现的时间过滤
- java - 测试覆盖仅调用另一个方法的方法的最佳方法是什么?
- python - 使用循环从更大的列表中保存新列表
- python - 使用用户输入来引用python中另一个文件中的函数
- javascript - JAVASCRIPT:ml5.js:后端 webgl 的初始化失败 t.initializeBackend @ tf-core.esm.js:17
- html - 更改窗口(浏览器)大小时如何防止div移动?
- python - 在打开文件函数的长字符串切片中切片
- hyperledger-fabric - Hyperledger Fabric 2.X 中的开发模式是否仍然存在问题?