25

別の配列からすでに満たされたデフォルトの要素数で固定サイズの配列を作成したいので、このメソッドがあるとしましょう:

def fixed_array(size, other)
  array = Array.new(size)
  other.each_with_index { |x, i| array[i] = x }
  array
end

したがって、次のような方法を使用できます。

fixed_array(5, [1, 2, 3])

そして、私は得るでしょう

[1, 2, 3, nil, nil]

Rubyでそれを行う簡単な方法はありますか? nil オブジェクトで既に持っている配列の現在のサイズを拡張するようなものですか?

4

8 に答える 8

44
def fixed_array(size, other)  
   Array.new(size) { |i| other[i] }
end
fixed_array(5, [1, 2, 3])
# => [1, 2, 3, nil, nil]
于 2013-05-30T08:10:59.680 に答える
3
a = [1, 2, 3]
b = a.dup
Array.new(5){b.shift} # => [1, 2, 3, nil, nil]

または

a = [1, 2, 3]
b = Array.new(5)
b[0...a.length] = a
b # => [1, 2, 3, nil, nil]

または

Array.new(5).zip([1, 2, 3]).map(&:last) # => [1, 2, 3, nil, nil]

または

Array.new(5).zip([1, 2, 3]).transpose.last # => [1, 2, 3, nil, nil]
于 2013-05-30T08:19:51.000 に答える
2

次のこともできます: (仮定other = [1,2,3])

(other+[nil]*5).first(5)
=> [1, 2, 3, nil, nil]

その他が [] の場合、取得します

(other+[nil]*5).first(5)
=> [nil, nil, nil, nil]
于 2016-04-06T15:51:32.923 に答える
2

@xaxxonの回答に似ていますが、さらに短いです:

5.times.map {|x| other[x]}

また

(0..4).map {|x| other[x]}
于 2016-04-06T15:57:14.717 に答える