重构循环成单行?

时间:2014-10-22 06:56:58

标签: ruby arrays

我获取两个数组的列表并将它们连接成一个数组然后返回它。是否可以将我的.each do语句简化为一行?另外,写一个更简单的方法是什么?

def array_concat(array_1, array_2)
  array_2.each do |x|
    array_1.push x
  end
  return array_1
end

Ruby 2.1.1p76

2 个答案:

答案 0 :(得分:4)

array_1.concat(array_2)

................................

答案 1 :(得分:4)

你可以在ruby中以各种方式实现它:

最简单的方法:

 [ 1, 2, 3 ] + [ 4, 5 ]
#=> [1, 2, 3, 4, 5]

使用concat:您可以将other_array的元素追加到self

[ "a", "b" ].concat( ["c", "d"] ) #=> [ "a", "b", "c", "d" ]

Woow,两者的作用相同,那么+concat之间的差异是什么。

+会创建一个新的数组对象,而concat会改变原始对象。

让我举例说明:

a = [1,2]
a.object_id # => 19388760 
a += [3]
a.object_id # => 18971360 


b = [1,2]
b.object_id # => 18937180 
b.concat [3]
b.object_id # => 18937180 

注意:在上面示例object_id a已更改,而b未更改。 ;)我希望这可以帮助你理解。