在不使用内置’flatten’方法的情况下展平Ruby数组

解决这个问题的常用方法是使用flatten方法。

这可以通过其他方式完成,比如不使用flatten吗?

 def flatten_array(arr) return arr.flatten end print flatten_array([1,2,3,4,[1,2,3,4],5]) 

 class Array def flattify each_with_object([]) do |element, flattened| flattened.push *(element.is_a?(Array) ? element.flattify : element) end end end [1,2,3,4,[1,2,3,4],5].flattify # => [1, 2, 3, 4, 1, 2, 3, 4, 5] 

非猴子修补Array版本:

 def flattify(array) array.each_with_object([]) do |element, flattened| flattened.push *(element.is_a?(Array) ? flattify(element) : element) end end flattify([1,2,3,4,[1,2,3,4],5]) # => [1, 2, 3, 4, 1, 2, 3, 4, 5] 

使用递归来解决这个问题。

 class ArrayConvert def self.flatten_array(array,init) array.each do |a| if a.class==Array flatten_array(a,init) else init << a end end init end p flatten_array([1, 2, 3, 4, [1, 2, 3, 4], 5],[]) end