2013-01-17 45 views
0

我想用ipaddr按升序排序一些ip地址。不知道爲什麼這不起作用。運行我的自定義排序後,訂單不受影響。在Ruby 1.8中排序IP地址

require 'ipaddr' 
ip_array = Array.new 
ip_array2 = Array.new 

ip_array = ["d1.mysite.com", 
      "d3.mysite.com", 
      "d2.mysite.com", 
      "d6.mysite.com", 
      "d32.mysite.com", 
      "d5.mysite.com", 
      "d9.mysite.com", 
      "d34.mysite.com"] 



## First, get IP addresses and push onto ip_array2 
ip_array.each { |x| ip_array2.push(IPSocket::getaddress(x)) } 

## Let's see the unsorted array contents 
ip_array2.each { |x| puts x } 


## Now, sort IP addresses in ip_array2 
ip_array2.sort { |a,b| IPAddr.new(a) <=> IPAddr.new(b) } 

## Let's see the sorted array contents 
ip_array2.each { |x| puts x } 

BEFORE SORT (1st 3 octets are identical) 

xxx.xx.xx.78 
xxx.xx.xx.114 
xxx.xx.xx.54 
xxx.xx.xx.57 
xxx.xx.xx.58 
xxx.xx.xx.79 
xxx.xx.xx.81 
xxx.xx.xx.100 

AFTER SORT (1st 3 octets are identical) 

xxx.xx.xx.78 
xxx.xx.xx.114 
xxx.xx.xx.54 
xxx.xx.xx.57 
xxx.xx.xx.58 
xxx.xx.xx.79 
xxx.xx.xx.81 
xxx.xx.xx.100 

回答

2

sort不到位。請致電sort!或將排序結果分配給ip_array2

+0

謝謝。排序順序沒有變化......怪異 – Slinky

+1

sort_by不到位。調用'sort_by!'來改變ip_array2或將sort_by的結果賦給ip_array2。對於您正在進行的電話也是如此。使用'排序!'進行排序 –

+0

輝煌,感謝您的解釋 – Slinky