基于第一个元素的Ruby二维数组排序

Sal*_*hag 3 ruby sorting ruby-on-rails

我有一个二维数组,具有以下结构

a = [["5/2013", 20.0, 6.0, 6.0], 
["7/2013", 73.0, 66.0, 66.0], 
["50/2013", 11530.0, 12625.27, 12087.75], 
["2/2014", 5926.0, 6058.0, 5876.4], 
["3/2013", 15.0, 0.0, 0.0], 
["4/2013", 15.0, 0.0, 0.0]]
Run Code Online (Sandbox Code Playgroud)

我想基于第一个元素对数组进行排序,每个数组的第一个元素表示一年中没有一年(即"2014年2月"意味着2014年的第二周,大于"50/2013"​​)结果将像这个

["3/2013", 15.0, 0.0, 0.0], 
["4/2013", 15.0, 0.0, 0.0],
["5/2013", 20.0, 6.0, 6.0], 
["7/2013", 73.0, 66.0, 66.0], 
["50/2013", 11530.0, 12625.27, 12087.75], 
["2/2014", 5926.0, 6058.0, 5876.4], 
]
Run Code Online (Sandbox Code Playgroud)

我试过这个

a.sort{|a,b| a[0].split('/')[1].to_i <=> b[0].split('/')[1].to_i  && a[0].split('/')  [0].to_i <=> b[0].split('/')[0].to_i}
Run Code Online (Sandbox Code Playgroud)

但它没有帮助.我是红宝石和铁轨的新手.任何人都可以帮我解决我的问题.

San*_*osh 9

a.sort_by {|i| i.first.split('/').map(&:to_i).reverse }

#[
#  ["3/2013", 15.0, 0.0, 0.0],
#  ["4/2013", 15.0, 0.0, 0.0],
#  ["5/2013", 20.0, 6.0, 6.0],
#  ["7/2013", 73.0, 66.0, 66.0],
#  ["50/2013", 11530.0, 12625.27, 12087.75],
#  ["2/2014", 5926.0, 6058.0, 5876.4]
#]
Run Code Online (Sandbox Code Playgroud)

  • @LeoHuang`&:to_i`是`{| x |的快捷方式 x.to_i}`.这将为您提供更多洞察力http://stackoverflow.com/questions/1217088/what-does-ampersand-colon-pretzel-colon-mean-in-ruby (2认同)