看板 Ruby 關於我們 聯絡資訊
※ 引述《skyboy (yes i do...)》之銘言: : example: (先以值排) : key value : 8 4 : 3 4 : 1 2 : 10 2 value 要大的在前面? : 然後再以鍵去排, 原來排好的順序(8,3,1,10)會變成 (1,3,8,10) : 不過這樣先前排的順序就沒效了~ : 想請問一下怎麼keep住之前所排的順序(值)然後再重新做排列呢(鍵) : key value : 3 4 : 8 4 : 1 2 : 10 2 然後 key 小的要在前面? anyway, 這只是演算法的問題,比較法則為: 1. 比 value 的大小 2. 如果 value 相等,則比 key 的大小 puts({8=>4, 3=>4, 1=>2, 10=>2}.sort{ |lhs, rhs| result = (lhs[1] <=> rhs[1])*-1 # 大的在前面 result = lhs[0] <=> rhs[0] if result == 0 # 相等則比 key result }.inspect) == output == [[3, 4], [8, 4], [1, 2], [10, 2]] -- Nobody can take anything away from him. Nor can anyone give anything to him. What came from the sea, has returned to the sea. Chrono Cross -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.28.18
skyboy:謝 :) 不過比較有疑問的是, 比完key後 第3個result是做?? 01/27 08:43
skyboy:btw,因為要比key大小 好像to_i比較不會出過(剛試過) 01/27 08:44
godfat:意思跟 return result; 是一樣的。要看你的 key type, 01/27 16:34
godfat:也許你的 key 不能 to_i. 我寫的是泛用的,operator <=> 01/27 16:35