ハッシュのソート
Hash#sort (実際は Enumerable)は、デフォルトで "ORDER BY key" だと嬉しい。よくやる操作だから。
#!/usr/bin/ruby
class Symbol
def <=> b
self.to_s <=> b.to_s
end
end
class Hash
alias :default_sort :sort
def sort &b
unless b.nil?
self.default_sort &b
else
self.to_a.sort { |a,b|
a[0] <=> b[0]
}
end
end
end
h = {
:e => 1,
:d => 2,
:c => 3,
:b => 4,
:a => 5,
}
if __FILE__ == $0
puts "Not sorted"
h.each do |k,v|
puts "\t" + [k,v].join(": ")
end
puts "ORDER BY key"
h.sort.each do |k,v|
puts "\t" + [k,v].join(": ")
end
puts "ORDER BY val"
h.sort{|a,b| a[1] <=> b[1]}.each do |k,v|
puts "\t" + [k,v].join(": ")
end
endSymbol の <=> も標準であると嬉しいかも。1.9 とか知らん。