IPアドレスをソートする
IPアドレスのソートがちょっと面倒。
普通にRubyを使ってIPアドレスをソートしようとすると、
1 ip_addrs = ["192.100.100.1", "192.11.11. 1", "192.11.100 .1"] 2 ip_addrs.sort 3 #=> ["192.100.10 0.1", "192.11.100 .1", "192.11.11. 1"]
きちんとソートするためには、こんな感じにしてみる。
1 ip_addrs.sort_by{|a| a.split(".").map{|i| "%3d" % i.to_i}} 2 #=> ["192.11.11.1", "192.11.100 .1", "192.100.10 0.1"]
もうちょっと綺麗に書けんなぁ? "%3d"とか、なんか嫌やなぁ。
ちなみにシェルだと、
1 $ echo ' 2 192.100.100.1 3 192.11.11. 1 4 192.11.100 .1 5 ' | sort -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4 -n 6 7 8 192.11.11. 1 9 192.11.100 .1 10 192.100.10 0.1
とかできるけど、-kオプションが気に入らない感じ。
もっと綺麗に書ける方法はないのだろうか・・・。