0

私は2つの配列を持っています

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つの配列から結果の配列を取得したい

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

1行簡単なRubyコードでそれを実現するにはどうすればよいですか? 複数行で行うことも、inject/reduce を使用して行うこともできます。

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

私が正しく理解している場合、あなたがしたいことは、「新しい」配列の空白/nilを「デフォルト」配列の対応する値に置き換えることです

これを試して

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

これは、「デフォルト」配列の任意の長さで機能するはずです。返される配列は、「デフォルト」と同じ長さになります

于 2012-10-22T05:20:00.060 に答える