2013-04-24 197 views
1

我在我的紅寶石的多維數組,看起來像這樣:排序多維數組,降

arr= [{"10.0.1.50", "4"}, 
     {"10.0.1.51", "10"}, 
     {"10.0.1.48", "7"}] 

我想對它進行排序,以使結果應該是:

result= [{"10.0.1.51", "10"}, 
     {"10.0.1.50", "4"}, 
     {"10.0.1.48", "7"}] 

我基本上在10.0.1.X的第一列進行排序。因此,它是基於X.分類

+0

線的東西你是排序依據左側「10.0 .1.51「或右側」10「 – 2013-04-24 22:45:10

+0

@garbagecollection:第一列.....我剛剛編輯帖子 – 2013-04-24 22:52:07

回答

4

的語法不是紅寶石,結果是有點曖昧,但我猜你想沿着

arr.sort_by { |(x,_)| x.split(".").map(&:to_i) }.reverse! 
+0

這不起作用,因爲第一列(10.0.1.X)被認爲是一個字符串。有什麼辦法可以將它轉換爲浮動嗎?如果我這樣做(.to_f),它會將其轉換爲10.0,忽略其後的所有內容。 – 2013-04-24 22:55:42

+0

@sagar:您需要指定您要用於排序的順序。我按字典順序猜測,將點分隔的塊解釋爲數字?如果您將IP地址表示爲32位整數,則不會出現這些問題 – 2013-04-24 22:57:38

+0

@sagar:另外,請檢查編輯。 – 2013-04-24 22:59:35