我試圖從一個散列數組中返回一列數值,從最低到最高。我現在用的是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