0

注意:我使用的是 ruby​​ 1.9.3,我不能带来任何外部依赖。我必须使用核心库来做到这一点。

@run_histogram 是名称到值数组的哈希值(此时有两个值,:failure 和 :run)

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] }

排序工作正常,但现在我的问题是我希望能够打印出场景名称(哈希的索引),然后打印出运行和失败计数。

不幸的是,目前我在使用 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多行块。将一系列内容强行放在一行中会损害可读性,并且通常是一件坏事。

于 2013-05-31T18:05:00.800 回答