在不使用内置’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