0

我有两个数组

default = ['0', '0', '0', '0'] # this is fixed
new = ['2', '3', ''] # it can be of many variants like ['', '1'] or 
                   # ['1', '', '', ''], but will never have 
                   # more than 4 elements

我想从上面的两个数组中得到一个结果数组

['2', '3', '0', '0']

如何通过一行简单的ruby​​ 代码实现它?我可以在多行或在注入/减少的帮助下完成。

4

3 回答 3

1
default.zip(new).map { |d,n| (n.nil? or n.empty?) ? d : n }
于 2012-10-22T05:26:35.537 回答
0

如果您使用的是导轨-

n = 4 # number of elements you need
n.times.map{|x| new[x].presence || default[x] }

如果不

n = 4 # number of elements you need
n.times.map{|x| (new[x].nil? || new[x] == "") ? default[x] : new[x] }
于 2012-10-22T04:59:14.820 回答
0

如果我理解正确,您想要做的是将“新”数组中的空白/空值替换为“默认”数组中的相应值

试试这个

 default.each_index.collect {|i| (new[i].nil? || new[i] == '') ? default[i] : new[i]}

这应该适用于任何长度的“默认”数组。返回的数组将与“默认”具有相同的长度

于 2012-10-22T05:20:00.060 回答