[Ruby] 構造体をソートする
部活で必要なものをちょこちょこ書いている時必要になったのでメモ。
Item = Struct.new(:x, :y, :z)
data = []
data << Item.new(1, 30, 200)
data << Item.new(5, 10, 400)
data << Item.new(3, 40, 500)
data << Item.new(2, 50, 100)
data << Item.new(4, 20, 300)
x = data.sort do |i, j|
i.x <=> j.x
end
y = data.sort do |i, j|
i.y <=> j.y
end
z = data.sort do |i, j|
i.z <=> j.z
end
x.each do |n|
print n.x, "\t", n.y, "\t", n.z, "\n"
end
puts
y.each do |n|
print n.x, "\t", n.y, "\t", n.z, "\n"
end
puts
z.each do |n|
print n.x, "\t", n.y, "\t", n.z, "\n"
end
実行結果
1 30 500
2 50 100
3 40 500
4 20 300
5 10 400
5 10 400
4 20 300
1 30 500
3 40 500
2 50 100
2 50 100
4 20 300
5 10 400
3 40 500
1 30 500
上から xでソートした場合 yでソートした場合 zでソートした場合。 ソートの順序(昇順/降順)を変更するには、比較の箇所を変更すればOK.
Previous Post
Next Post