我试图从一个散列数组中返回一列数值,从最低到最高。我现在用的是google_drive宝石从谷歌电子表格拉号码,显示足球信息:通过散列数组中的散列值进行排序
这是我在哪里:
require 'rubygems'
require 'google_drive'
session = GoogleDrive.login("EMAIL", "PASS")
v_qb_w1 = session.spreadsheet_by_key("xxxxxxxx").worksheets[0]
@quarterbacks = [
{ name: v_qb_w1[2, 1], projection: v_qb_w1[2, 2], salary: v_qb_w1[2, 3], dpp: v_qb_w1[2, 4], ppd: v_qb_w1[2, 5] },
{ name: v_qb_w1[3, 1], projection: v_qb_w1[3, 2], salary: v_qb_w1[3, 3], dpp: v_qb_w1[3, 4], ppd: v_qb_w1[3, 5] },
{ name: v_qb_w1[4, 1], projection: v_qb_w1[4, 2], salary: v_qb_w1[4, 3], dpp: v_qb_w1[4, 4], ppd: v_qb_w1[4, 5] }
]
puts "Value:"
@quarterbacks.sort_by do |key, value|
dpp = []
dpp << key[:dpp].to_f.to_s
puts dpp.flatten.sort.reverse
end
这最后一块只是我的尝试,试图排序的一个:从最低到最高的dpp键值。没有任何失败,它只是不会改变任何事情。我已经试过grouby_by方法,只是没有运气安排好自己的键值
SOLUTION:
@quarterbacks.sort_by! { |qb| qb[:dpp] }
@quarterbacks.each { |qb| puts qb[:dpp] }
,所以我尝试了bang方法之前,即使你上面的解释帮助了很多,它仍然会返回一个无序的值列表:413,516,435,410,540等。在我需要添加的块内部有某种比较吗?现在我有这个:@ quarterbacks.sort_by!{| qb |如果qb [:dpp] .to_f> 0}则放入qb [:dpp] .to_f – 2014-09-02 18:42:30
(1)摆脱'puts',你的块总是返回'nil',因为它是对'puts'的调用。 (2)为什么你的区块有条件?如果您提供了样本数据,这可能会有所帮助。 – 2014-09-02 18:44:54