我有以下简单的代码:
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?
从我的头脑中,我没有看到在删除之前没有预先计算最小值的方法.但你可以美化代码.那这个呢?
min_res = chains.map(&:resolution).min
chains.delete_if {|c| c.resolution > min_res }
Run Code Online (Sandbox Code Playgroud)
#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)