2个数组:
a = [[1, 2], [22, 11], [18, 9]]
b = [[1, 81]]
用[0,0]填写第二个的最佳方法是什么,所以它们的大小相同?
答案 0 :(得分:5)
b.fill(b.size..a.size - 1) { [0, 0] }
答案 1 :(得分:4)
不是最有效但可读的:
b << [0,0] until a.size == b.size
更有效率:
b.concat [[0,0]] * (a.size-b.size)
答案 2 :(得分:3)
在我看来,这更具可读性:
(a.length - b.length).times do
b << [0, 0]
end
答案 3 :(得分:1)
我喜欢fill
,但似乎已经采取了这种做法。这是一种在不改变b
的情况下返回所需数组的方法。没有被要求,但它在某些应用中可能有用:
Array.new(a.size) { |i| b[i] || [0,0] }
#=> [[1, 81], [0, 0], [0, 0]]
当然,您可以将b =
放在前面。
另一种原位方式是:
b.concat [[0,0]]*(a.size-b.size)
嘿,这很有趣。另一个(假设没有b
的元素等于nil
):
a.each_index { |i| b[i] ||= [0,0] }
b
答案 4 :(得分:0)
我希望append
while
的尺寸更小,因为我觉得它很好看:
a = [[1, 2], [22, 11], [18, 9]]
b = [[1, 81]]
b << [0, 0] while b.size < a.size
b #=> [[1, 2], [0, 0], [0, 0]]