2013-04-24 132 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