在不使用内置“展平”的情况下展平Ruby数组。方法

时间:2015-08-11 11:12:34

标签: ruby

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

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

def flatten_array(arr)
  return arr.flatten    
end

print flatten_array([1,2,3,4,[1,2,3,4],5])

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分:2)

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

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