作者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