Ruby 在一个函数中从新创建的数组中获取最大值
Ruby Getting a max value out of a newly created array in one function
我希望我的函数 return 嵌套数组(包括数组本身)中最长的数组,所以
nested_ary = [[1,2],[[1,2,[[1,2,3,4,[5],6,7,11]]]],[1,[2]]
deep_max(nested_ary)
=> [1,2,3,4,[5],6,7,11]
simple_ary = [1,2,3,4,5]
deep_max(simple_ary)
=> returns: [1,2,3,4,5]
我创建了一个函数来收集所有数组。我必须在另一个函数中获得最大值。
我的代码:
def deep_max(ary)
ary.inject([ary]) { |memo, elem|
if elem.is_a?(Array)
memo.concat(deep_max(elem))
else
memo
end }
end
这给了我想要的:
deep_max(nested_ary).max_by{ |elem| elem.size }
有没有办法在函数内部得到这个最大值?
您可以展开它:
def deep_max(ary)
arys = []
ary = [ary]
until ary.empty?
elem = ary.pop
if elem.is_a?(Array)
ary.push(*elem)
arys.push(elem)
end
end
arys.max_by(&:size)
end
或者您可以作弊,通过引入一个可选参数来改变您的递归在顶层的工作方式与它在兔子洞中的行为方式。
def deep_max(arr)
biggest_so_far = arr
arr.each do |e|
if e.is_a?(Array)
candidate = deep_max(e)
biggest_so_far = candidate if candidate.size > biggest_so_far.size
end
end
biggest_so_far
end
deep_max [[1, 2], [[1, 2, [[1, 2, 3, 4, [5], 6, 7, 11]]]], [1, [2]]]
#=> [1, 2, 3, 4, [5], 6, 7, 11]
我希望我的函数 return 嵌套数组(包括数组本身)中最长的数组,所以
nested_ary = [[1,2],[[1,2,[[1,2,3,4,[5],6,7,11]]]],[1,[2]]
deep_max(nested_ary)
=> [1,2,3,4,[5],6,7,11]
simple_ary = [1,2,3,4,5]
deep_max(simple_ary)
=> returns: [1,2,3,4,5]
我创建了一个函数来收集所有数组。我必须在另一个函数中获得最大值。
我的代码:
def deep_max(ary)
ary.inject([ary]) { |memo, elem|
if elem.is_a?(Array)
memo.concat(deep_max(elem))
else
memo
end }
end
这给了我想要的:
deep_max(nested_ary).max_by{ |elem| elem.size }
有没有办法在函数内部得到这个最大值?
您可以展开它:
def deep_max(ary)
arys = []
ary = [ary]
until ary.empty?
elem = ary.pop
if elem.is_a?(Array)
ary.push(*elem)
arys.push(elem)
end
end
arys.max_by(&:size)
end
或者您可以作弊,通过引入一个可选参数来改变您的递归在顶层的工作方式与它在兔子洞中的行为方式。
def deep_max(arr)
biggest_so_far = arr
arr.each do |e|
if e.is_a?(Array)
candidate = deep_max(e)
biggest_so_far = candidate if candidate.size > biggest_so_far.size
end
end
biggest_so_far
end
deep_max [[1, 2], [[1, 2, [[1, 2, 3, 4, [5], 6, 7, 11]]]], [1, [2]]]
#=> [1, 2, 3, 4, [5], 6, 7, 11]