わたなべです. Koretsugu Daigoro <tmmcross / hk.airnet.ne.jp> writes: :これだと ary0.keysort!('age') で死にます。 :e.indexes(*keys) が一致すると e で比較しようとするわけですが、 :今は e が hash なので比較できない(<=> がない)からです。 なるほど. これこそいわゆる stable な sort にしなきゃってことですね. :あまり変えずに回避するには : :- filter{|e| [e.indexes(*keys), e]}.sort!.filter{|e| e.pop} :+ filter{|e| [e.indexes(*keys), self.index(e), e]}.sort!.filter{|e| e.pop} : :とかでしょうか? どうせ順番に出てくるわけだから i = 0 filter{|e| [e.indexes(*keys), i += 1, e]}.sort!.filter{|e| e.pop} で十分です. たぶん. でも自分の好みだとこうしちゃうかも. module Keyssort def with_index i = -1 filter do |x| [x, i += 1] end end def keyssort!(*keys) with_index.filter{|e, i| [e.indexes(*keys), i, e]}.sort!.filter{|e| e.pop} end def keyssort(*keys) dup.keyssort!(*keys) end end ary0.extend Keyssort ary0.keyssort!('age') p ary0 -- わたなべひろふみ