在循环中查找数组的值

时间:2013-03-03 03:25:03

标签: ruby-on-rails ruby ruby-on-rails-3.2

这个有效!但如果我的JSON返回200个程序,这也将打印所有这200个程序。但我想改变辅助方法的方式是只返回TOP 5它们的百分比最高。

如何修改辅助方法来实现此目的?

PS:我知道这样做的最好和最专业的方法是在模型文件或实际创建JSON的ActiveRecord查询接口中使用“范围”和“顺序”等...但是现在这样做摆脱我的感觉!希望通过婴儿步骤完成这一步......以后再做......

2 个答案:

答案 0 :(得分:2)

尝试以下

def patient_counts(program)
  sorted = program.patient_counts.sort { |a, b| b.money <=> a.money }
  sorted[0..4]
end

更新:限制为从db

获取的5条记录
def patient_counts(program)
  program.registry_patient_counts.limit(5).order('patient_count_percentage DESC')
end

答案 1 :(得分:1)

创建以患者为关键字的哈希值,并将patients.money作为值。这可以通过以下方式实现:

unsorted_patients = { }
program.patient_counts.each do |patient|
    sorted_patients[patient] = patient.money
end

然后使用sort_by将哈希值排序为二维数组:

sorted_patients = unsorted_patients.sort_by { |patient, money| money }
sorted_patients.reverse!

sorted_pa​​tients的前五个元素现在将是2个元素的数组,其中包含5个钱最多的患者,以及他们有多少钱,如下所示:

[[<Bob>, 150000], [<Mary>, 138000], [<Joe>, 125000],...]

您应该能够轻松地从中提取所需的信息。