<?xml version="1.0" encoding="UTF-8"?>
<article>
  <body>[&#21069;&#22238;&#12398;&#35352;&#20107;](http://blog.s21g.com/articles/890)&#12391;&#12289;IP&#12450;&#12489;&#12524;&#12473;&#12398;&#12477;&#12540;&#12488;&#12395;&#12388;&#12356;&#12390;&#26360;&#12365;&#12414;&#12375;&#12383;&#12290;

&#20170;&#22238;&#12399;&#12381;&#12398;&#32154;&#12365;&#12391;&#12289;takiuchi&#12373;&#12435;&#12395;&#25945;&#12360;&#12390;&#12418;&#12425;&#12387;&#12383;&#12418;&#12398;&#12420;&#12289;&#33258;&#20998;&#12391;&#26360;&#12356;&#12383;&#12418;&#12398;&#12398;&#24615;&#33021;&#27604;&#36611;&#12434;&#12375;&#12424;&#12358;&#12392;&#24605;&#12356;&#12414;&#12377;&#12290;

&#12414;&#12378;&#12289;&#21069;&#22238;&#12398;&#35352;&#20107;&#65286;&#12467;&#12513;&#12531;&#12488;&#12391;&#12393;&#12398;&#12424;&#12358;&#12394;&#12477;&#12540;&#12488;&#26041;&#27861;&#12364;&#12354;&#12387;&#12383;&#12363;&#12392;&#12356;&#12358;&#12392;&#12289;

&#9312;&#33258;&#20998;&#12391;&#26360;&#12356;&#12383;&#12477;&#12540;&#12488;(&#20197;&#19979;, my_sort_1)
ruby&gt;&gt;
ip_addrs.sort_by{|a| a.split(&quot;.&quot;).map{|i| &quot;%3d&quot; % i.to_i}}
&lt;&lt;ruby

&#9313;&#33258;&#20998;&#12391;&#26360;&#12356;&#12383;&#12477;&#12540;&#12488;&#12539;&#25913;(&#20197;&#19979;, my_sort_2)
ruby&gt;&gt;
ip_addrs.sort_by{|a| a.split(&quot;.&quot;).map{|i| i.to_i}}
&lt;&lt;ruby

&#9314;takiuchi&#12373;&#12435;&#12395;&#25945;&#12360;&#12390;&#12356;&#12383;&#12384;&#12356;&#12383;&#12477;&#12540;&#12488;(&#20197;&#19979;, takiuchi_sort)
ruby&gt;&gt;
ip_addrs.sort_by{|i| Socket.sockaddr_in nil, i}
&lt;&lt;ruby

&#12398;&#65299;&#12388;&#12391;&#12377;&#12290;
&#12371;&#12428;&#12425;&#12395;&#12388;&#12356;&#12390;&#12289;&#12505;&#12531;&#12481;&#12510;&#12540;&#12463;&#12434;&#12392;&#12387;&#12390;&#12415;&#12414;&#12377;&#12290;

&#12477;&#12540;&#12488;&#12377;&#12427;&#23550;&#35937;&#12392;&#12375;&#12390;&#12399;&#12289;[&#19990;&#30028;&#12398;&#22269;&#21029; IPv4 &#12450;&#12489;&#12524;&#12473;&#21106;&#12426;&#24403;&#12390;&#12522;&#12473;&#12488;](http://nami.jp/ipv4bycc/)&#12434;&#20351;&#12356;&#12414;&#12375;&#12383;&#12290;

&#12414;&#12378;&#12289;&#19979;&#28310;&#20633;&#12392;&#12375;&#12390;&#12289;&#19978;&#35352;&#12522;&#12473;&#12488;&#12395;&#12399;&#12289;[&#12469;&#12502;&#12493;&#12483;&#12488;&#12510;&#12473;&#12463;&#29256;&#12392;](http://nami.jp/ipv4bycc/mask.txt)&#12289;[CIDR&#34920;&#35352;&#29256;](http://nami.jp/ipv4bycc/cidr.txt)&#12364;&#12354;&#12427;&#12398;&#12391;&#12289;&#12371;&#12371;&#12363;&#12425;IP&#12450;&#12489;&#12524;&#12473;&#12398;&#12415;&#12434;&#25277;&#20986;&#12375;&#12289;Array&#22411;&#12398;&#12458;&#12502;&#12472;&#12455;&#12463;&#12488;&#12395;&#26684;&#32013;&#12390;&#12362;&#12365;&#12414;&#12377;(&#12371;&#12398;&#12458;&#12502;&#12472;&#12455;&#12463;&#12488;&#12434;ip_addrs&#12392;&#12377;&#12427;)&#12290;

&#20840;&#37096;&#12391;&#12289;51814&#12398;IP&#12450;&#12489;&#12524;&#12473;&#12364;&#12354;&#12427;&#12425;&#12375;&#12356;&#12391;&#12377;&#12290;

&#12381;&#12375;&#12390;&#12289;&#12505;&#12531;&#12481;&#12510;&#12540;&#12463;&#12434;&#12392;&#12387;&#12390;&#12415;&#12414;&#12377;&#12290;
-&#12467;&#12540;&#12489;
ruby&gt;&gt;
require 'benchmark'
Benchmark.bm do |x|
  x.report(&quot;my_sort_1    :&quot;){ ip_addrs.sort_by{|a| a.split(&quot;.&quot;).map{|i| &quot;%3d&quot; % i.to_i}}}
  x.report(&quot;my_sort_2    :&quot;){ ip_addrs.sort_by{|a| a.split(&quot;.&quot;).map{|i| i.to_i}}}
  x.report(&quot;takiuchi_sort:&quot;){ ip_addrs.sort_by{|i| Socket.sockaddr_in nil, i}}
end
&lt;&lt;ruby

-&#32080;&#26524;
ruby&gt;&gt;
      user     system      total        real
my_sort_1    :  3.860000   1.160000   5.020000 (  5.017623)
my_sort_2    :  2.170000   0.650000   2.820000 (  2.819594)
takiuchi_sort:  0.690000   0.180000   0.870000 (  0.864372)
&lt;&lt;ruby

takiuchi&#12373;&#12435;&#12395;&#25945;&#12360;&#12390;&#12356;&#12383;&#12384;&#12356;&#12383;&#12477;&#12540;&#12488;&#12364;&#22311;&#20498;&#30340;&#12395;&#36895;&#12356;&#12391;&#12377;&#12397;&#65281;&#65281;
&#12371;&#12371;&#12414;&#12391;&#24046;&#12364;&#12391;&#12427;&#12392;&#12399;&#12289;&#27491;&#30452;&#24605;&#12387;&#12390;&#12356;&#12394;&#12363;&#12387;&#12383;&#12290;

&#33258;&#20998;&#12391;&#26360;&#12356;&#12383;my_sort_1&#12392;my_sort2&#12391;&#12418;&#12363;&#12394;&#12426;&#12398;&#24046;&#12364;&#12415;&#12425;&#12428;&#12414;&#12375;&#12383;&#12290;

&#12414;&#12353;&#12289;my_sort_1&#12398;&#12411;&#12358;&#12399;&#28961;&#39364;&#12364;&#22810;&#12356;&#12391;&#12377;&#12375;&#12397;&#12539;&#12539;&#12539;&#12290;


&#12371;&#12435;&#12394;&#24863;&#12376;&#12391;&#12289;&#32080;&#35542;&#12392;&#12375;&#12390;&#12399;&#12289;
takiuchi&#12373;&#12435;&#12398;&#12289;
ruby&gt;&gt;
ip_addrs.sort_by{|i| Socket.sockaddr_in nil, i}
&lt;&lt;ruby
&#12364;&#12505;&#12531;&#12481;&#12510;&#12540;&#12463;&#30340;&#12395;&#20778;&#31168;&#12391;&#12289;&#12467;&#12540;&#12489;&#12398;&#35211;&#12383;&#30446;&#12418;&#12471;&#12531;&#12503;&#12523;&#12391;&#12363;&#12394;&#12426;&#33391;&#12373;&#12370;&#12391;&#12377;&#65281;&#65281;

&#20182;&#12395;&#12300;&#12371;&#12435;&#12394;&#26041;&#27861;&#12398;&#12477;&#12540;&#12488;&#12364;&#12354;&#12427;&#12424;&#65281;&#12301;&#12392;&#12356;&#12358;&#12398;&#12364;&#12354;&#12428;&#12400;&#12289;&#25945;&#12360;&#12390;&#12356;&#12383;&#12384;&#12369;&#12427;&#12392;&#23305;&#12375;&#12356;&#12391;&#12377;&#65281;</body>
  <cached-tag-list>Ruby</cached-tag-list>
  <comments-count type="integer">0</comments-count>
  <created-at type="datetime">2008-09-24T17:01:15+00:00</created-at>
  <daily-archive-id type="integer">790</daily-archive-id>
  <filter-type>blue_stole</filter-type>
  <id type="integer">903</id>
  <monthly-archive-id type="integer">99</monthly-archive-id>
  <pdf-digest nil="true"></pdf-digest>
  <permalink nil="true"></permalink>
  <published-at type="datetime">2008-09-24T17:02:00+00:00</published-at>
  <secret>5f52dd19-1b32-4cb6-a106-6556a73b2fbe</secret>
  <title>IP&#12450;&#12489;&#12524;&#12473;&#12434;&#12477;&#12540;&#12488;&#12377;&#12427; (&#24615;&#33021;&#27604;&#36611;&#32232;)</title>
  <updated-at type="datetime">2008-09-24T17:24:30+00:00</updated-at>
  <user-id type="integer">50</user-id>
</article>
