在数组中查找最大或最小属性时,是否可以避免创建局部变量?

cal*_*ben 1 ruby

我有以下简单的代码:

max_length = 0
chains.each { |x| if x.resolution < min_resolution min_resolution = x.resolution }
chains.delete_if { |x| x.resolution > min_resolution }
Run Code Online (Sandbox Code Playgroud)

其中chains有属性resolution,我想删除所有chain没有最低的属性resolution.这个解决方案有效,但我试图保持我的代码整洁,并试图避免局部变量.有没有办法解决上面的问题而不创建变量max_length

Ser*_*sev 5

从我的头脑中,我没有看到在删除之前没有预先计算最小值的方法.但你可以美化代码.那这个呢?

min_res = chains.map(&:resolution).min
chains.delete_if {|c| c.resolution > min_res }
Run Code Online (Sandbox Code Playgroud)


ste*_*lag 5

#sample data:
Chain = Struct.new(:resolution)
chains = 1000.times.map{Chain.new(rand(100))}

# do work:
p chains.group_by(&:resolution).min.last
#=>[#<struct Chain resolution=0>, #<struct Chain resolution=0>, ...]
Run Code Online (Sandbox Code Playgroud)

  • @sawa:Hash是一个Enumerable.它是免费获得的. (2认同)
  • @sawa:是的,但由于两个密钥彼此相等是非法的,它实际上只是按密钥排序. (2认同)