1

我有以下简单的代码:

max_length = 0
chains.each { |x| if x.resolution < min_resolution min_resolution = x.resolution }
chains.delete_if { |x| x.resolution > min_resolution }

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

4

3 回答 3

5

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

min_res = chains.map(&:resolution).min
chains.delete_if {|c| c.resolution > min_res }
于 2013-05-26T19:59:24.820 回答
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>, ...]
于 2013-05-26T20:15:13.427 回答
1

我不确定我是否正确地回答了这个问题。在您没有或不需要重复的解释下,我认为这就足够了:

[chains.min_by(&:resolution)]
于 2013-05-26T20:02:10.727 回答