Ruby資料一覧

ハッシュ

2007/8/1更新

対応バージョン: 1.8

ハッシュをソートする

ハッシュのキー、値それぞれでソート可能である。

例)

data = {}

data[1] = 1
data[0] = 5
data[2] = 4
data[4] = 3
data[3] = 2

p data.sort {|x, y| x[0] <=> y[0]}	# キーでソート
=> [[0, 5], [1, 1], [2, 4], [3, 2], [4, 3]]

p data.sort {|x, y| x[1] <=> y[1]}	# 値でソート
=> [[1, 1], [3, 2], [4, 3], [2, 4], [0, 5]]

(*) xとyの[0]、[1]にはそれぞれ「キー」、「値」が入る。

逆順にソートしたい場合は以下のようにいったんソートしたものを逆順に並び替えることで実現可能である(reverseは逆順ソートではなく、単に逆に並べ替えるだけである)。

p data.sort.reverse {|x, y| x[0] <=> y[0]}
=> [[4, 3], [3, 2], [2, 4], [1, 1], [0, 5]]

参考までに、逆順ソートした値を使用する場合は以下のようにする(暗黙的にキー順にソートされる)。

data.sort.reverse_each {|key, item|
  puts "#{key} #{item}"
}

=> 4 3
=> 3 2
=> 2 4
=> 1 1
=> 0 5

ハッシュの添字に変数を使用する

最初に{}でハッシュを初期化し、ハッシュのキー部に変数名を「"」でくくって指定する。

例)

data = {}			# ハッシュ初期化

key = "key_a"			# キー設定

data["#{key}"] = "abc"		# ハッシュ設定

p data["#{key}"]

=> "abc"