创建一个固定大小的数组,并用另一个数组填充默认内容?

ror*_*rra 16 ruby arrays

我想创建一个固定大小的数组,其中已经从另一个数组填充了默认数量的元素,所以假设我有这个方法:

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

那么我可以使用如下方法:

fixed_array(5, [1, 2, 3])
Run Code Online (Sandbox Code Playgroud)

我会得到的

[1, 2, 3, nil, nil]
Run Code Online (Sandbox Code Playgroud)

在红宝石中有更简单的方法吗?就像扩展我已经拥有的nil对象的数组的当前大小一样?

tor*_*o2k 31

def fixed_array(size, other)  
   Array.new(size) { |i| other[i] }
end
fixed_array(5, [1, 2, 3])
# => [1, 2, 3, nil, nil]
Run Code Online (Sandbox Code Playgroud)


xax*_*xon 11

5.times.collect{|i| other[i]}
 => [1, 2, 3, nil, nil] 
Run Code Online (Sandbox Code Playgroud)


Ste*_*fan 5

在红宝石中有更简单的方法吗?就像扩展我已经拥有的nil对象的数组的当前大小一样?

是的,您可以通过以下方式设置最后一个元素来扩展当前数组Array#[]=:

a = [1, 2, 3]
a[4] = nil # index is zero based
a
# => [1, 2, 3, nil, nil]
Run Code Online (Sandbox Code Playgroud)

方法可能如下所示:

def grow(ary, size)
  ary[size-1] = nil if ary.size < size
  ary
end
Run Code Online (Sandbox Code Playgroud)

请注意,这将修改传递的数组.