From: gotoken@... (GOTO Kentaro) Date: 1998-06-26T19:17:36+09:00 Subject: [ruby-list:8538] Re: hash sort ごとけんです In message "[ruby-list:8536] Re: hash sort" on 98/06/26, Sinichiro Dezawa writes: >出沢です >ちょうど、hash のソートをしたかった時なので助かりました。 どもども (^^;; >もしかして、ruby 1.1b9_06 って、数値のとき b[0] <=> a[0]) は b[0]- a[0] を >返したりしてませんか? > > *2 ではだめで、 *10 とか大きいのをいれたら、期待通りになりました。 > (b[0] の範囲が せいぜい 10 だったので) > > あれ?? ruby -e 'print 1<=>10' は ちゃんと -1 だな、、、 > もう一度見直して見よう。 もともと、<=> の値は -1,0,1 とは限らず、負、0、正というお約束の だから、こういうことがあってもおかしくないので、やはり 自分で <=> の値域を -1,0,1 となるよう再定義しない限りは hash.to_a.sort { |a, b| (b[1] <=> a[1]).nonzero? or (b[0] <=> a[0]) } の方が安全でしょう。もとの例で高速化が期待されるのは、 nonzero? よりも b[0] <=> a[0] の方が早い場合だけですし。 # そーゆーケースはよくあるのだけど -- gotoken