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すべての s を削除したいと考えています。この解決策は機能しますが、コードを整頓し、ローカル変数を回避しようとしています。変数を作成せずに上記の問題を解決する方法はありますか?chainresolutionmax_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 に答える