0

注: Ruby 1.9.3 を使用していますが、外部依存関係を持ち込むことはできません。コアライブラリでこれを行う必要があります。

@run_histogram は、値の配列への名前のハッシュです (この時点で :failure と :run の 2 つの値)

foo = @run_histogram.sort_by { |scenario_name, failure_and_run_count|
  (failure_and_run_count[:failure].to_f / failure_and_run_count[:run].to_f) * -100.0
}

foo.each{|x| puts x[0]; puts x[1][:run]; puts x[1][:failure] }

並べ替えは正しく機能していますが、今の問題は、scenario_name (ハッシュのインデックス) を出力してから、実行と失敗の数を出力できるようにしたいということです。

残念ながら、現時点では、sort_by を使用した後に配列のインデックスを使用することを余儀なくされていますが、これは悪いことです。それらは「魔法の数字」です。:run および :failure シンボルを引き続き使用してデータにアクセスしたいと思います。

誰もがより良い解決策を持っていますか?

4

1 に答える 1

2

最初に行ったように、引数に名前を付けてみませんか?

foo = @run_histogram.sort_by { |scenario_name, failure_and_run_count|
  (failure_and_run_count[:failure].to_f / failure_and_run_count[:run].to_f) * -100.0
}

foo.each do |scenario_name, failure_and_run_count|
  puts scenario_name
  puts failure_and_run_count[:run]
  puts failure_and_run_count[:failure]
end

中間フォームを保存する必要がない場合は、これらをチェーンすることもできます。

@run_histogram.sort_by do |scenario_name, failure_and_run_count|
   # ...
end.each do |scenario_name, failure_and_run_count|
   # ...
end

{ ... }単一行のブロックと複数行のブロックに使用するのがより一般的であることに注意してくださいdo ... end。一連のものを 1 行にまとめることは読みやすさを損ない、一般的に悪いことです。

于 2013-05-31T18:05:00.800 に答える