数组排序不正确



我对数组进行排序时遇到问题。我的预期结果是:

@list = [
  ["2 1/8"", "23 13/32"", "stile", "2"],
  ["2 1/8"", "11 5/32"", "rail", "6"],
  ["2 1/8"", "7 13/32"", "stile", "4"]
]

这只是一个例子,因为数组是动态的,数据总是在变化,但不变的一件事是,大多数(如果不是全部)个位数测量值在开始时结束。

这是我使用的代码:

@list = @list.sort {|a,b| b[1]<=>a[1]}    

下面是代码的实际输出。

@list
# => [
#   ["2 1/8"", "7 13/32"", "stile", "2"],
#   ["2 1/8"", "23 13/32"", "rail", "6"],
#   ["2 1/8"", "11 5/32"", "stile", "4"]
# ] 

知道为什么吗?

如果目标是按每个数组(7、23、11)的第二个值的第一个数值进行排序,则将字符串转换为排序中的整数可能是一种解决方案:

@list = @list.sort {|a,b| b[1].to_i <=> a[1].to_i }

您还可以使用 sort! 使其更短:

@list.sort! {|a,b| b[1].to_i <=> a[1].to_i }

最新更新