作者godfat (godfat 真常)
看板Ruby
標題Re: [問題] hash的排序?
時間Sat Jan 27 02:56:57 2007
※ 引述《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
1F:推 skyboy:謝 :) 不過比較有疑問的是, 比完key後 第3個result是做?? 01/27 08:43
2F:→ skyboy:btw,因為要比key大小 好像to_i比較不會出過(剛試過) 01/27 08:44
3F:推 godfat:意思跟 return result; 是一樣的。要看你的 key type, 01/27 16:34
4F:→ godfat:也許你的 key 不能 to_i. 我寫的是泛用的,operator <=> 01/27 16:35