解决此问题的常用方法是使用flatten
方法。
这可以通过其他方式完成,比如不使用flatten
吗?
def flatten_array(arr)
return arr.flatten
end
print flatten_array([1,2,3,4,[1,2,3,4],5])
答案 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