Ruby 将字符串日期行转换为日期对象数组

Ruby 将字符串日期行转换为日期对象数组,ruby,arrays,string,date,null,Ruby,Arrays,String,Date,Null,我有一个包含一些nil值的二维数组 require 'date' array = [["2014-01-12", "2014-01-12", "2014-01-12"], ["2012-08-26", "2012-10-18", nil], ["2013-04-09", "2013-05-22", "2013-07-01"]] 所需的结果是日期对象数组。生成的数组应该如下所示 (用于显示的日期对象): 欢迎您的任何意见 编辑: 作为一名编码新手,我将非常

我有一个包含一些nil值的二维数组

require 'date'
array = [["2014-01-12", "2014-01-12", "2014-01-12"],
          ["2012-08-26", "2012-10-18", nil],
          ["2013-04-09", "2013-05-22", "2013-07-01"]]
所需的结果是日期对象数组。生成的数组应该如下所示 (用于显示的日期对象):

欢迎您的任何意见

编辑:


作为一名编码新手,我将非常感谢您对这个解决方案的其他方法的任何意见

如果要将最后一个元素解析为日期,可以执行以下操作:

changed_date = array.map(&:last).map { |d| Date.parse(d) if d }
# => [#<Date: 2014-01-12 ((2456670j,0s,0n),+0s,2299161j)>, nil, #<Date: 2013-07-01 ((2456475j,0s,0n),+0s,2299161j)>] 
changed_date=array.map(&:last.map{d|date.parse(d)if d}
#=>

第一个
map
只获取每个数组的最后一个元素,第二个解析日期,除非它是
nil
类似于Uri的解决方案,但只有一个
map

array.map {|*_, d| Date.parse(d) if d}
# => [#<Date: 2014-01-12 ((2456670j,0s,0n),+0s,2299161j)>, nil, #<Date: 2013-07-01 ((2456475j,0s,0n),+0s,2299161j)>]
array.map{|*|,d | Date.parse(d)if d}
#=>

无需两次迭代
[array.flatte.map{d|d | Date.parse(d)if d}]
@在他的预期结果中,OP只使用了
due[2]
(数组的最后一个元素)…看起来您的解决方案也很有效,您认为它有什么问题?您的问题是什么?更改的数组和更改的日期之间有什么区别?@sawa这是一个打字错误。无需编辑,也可包含问题。如果有人知道为什么会给a-1,请告诉我为什么!这是非常有用的输入,所以感谢您花时间!
changed_date = array.map(&:last).map { |d| Date.parse(d) if d }
# => [#<Date: 2014-01-12 ((2456670j,0s,0n),+0s,2299161j)>, nil, #<Date: 2013-07-01 ((2456475j,0s,0n),+0s,2299161j)>] 
array.map {|*_, d| Date.parse(d) if d}
# => [#<Date: 2014-01-12 ((2456670j,0s,0n),+0s,2299161j)>, nil, #<Date: 2013-07-01 ((2456475j,0s,0n),+0s,2299161j)>]