Ruby - 使用整数作为字符串对嵌套数组进行排序

时间:2016-10-20 21:41:26

标签: ruby sorting

我试图在下面执行一种数组数组。我能够成功地使用sort_by执行实际的排序操作,但我无法更新原始数组。

相反,我正在尝试将每个修改后的哈希推送到一个新数组(array),然后尝试将其重新整合/合并到原来的那个我认为不是正确的方法就像排序字符串整数一样简单...我如何简单地对以下数据格式进行排序? 完全可以接受创建新对象;这不需要就地排序操作,但这两种方法都是可以接受的。

预期结果

我的目标是简单地升序章节数字(字符串),这是我哈希中的键。因此,例如,马修已经按顺序排列,但是Acts应首先列出6,然后列出9。罗马人应首先列出2,然后列出15,等等。最重要的是,书籍的顺序(马太福音,使徒行传,罗马书和启示录)必须保持原状。

以下是我尝试过的内容:

array = Array.new

data.each do |x|
  array << Hash[x.last.sort_by {|k,v| k.to_i }]
end

# 'array' now contains accurate data that has been sorted but it more difficult to re-merge it than to simply sort the original data

以下是我的数据:

data = [["Matthew",
  {"4"=>[{:book=>"Matthew", :verse=>"18-20", :section=>"new_testament"}],
   "22"=>[{:book=>"Matthew", :verse=>"37-38", :section=>"new_testament"}]}],
 ["Acts",
  {"9"=>[{:book=>"Acts", :verse=>"8", :section=>"new_testament"}],
   "6"=>[{:book=>"Acts", :verse=>"27-28", :section=>"new_testament"}]}],
 ["Romans",
  {"15"=>[{:book=>"Romans", :verse=>"13A", :section=>"new_testament"}],
   "2"=>[{:book=>"Romans", :verse=>"4", :section=>"new_testament"}]}],
 ["Revelation",
  {"7"=>[{:book=>"Revelation", :verse=>"9-10", :section=>"new_testament"}],
   "2"=>[{:book=>"Revelation", :verse=>"2-5B", :section=>"new_testament"}],
   "1"=>[{:book=>"Revelation", :verse=>"9-10", :section=>"new_testament"}]}]]

1 个答案:

答案 0 :(得分:2)

我认为你就在那里......只需在你的输出中包含书名。

new_data = []

data.each do |x|
  new_data << [ x[0], Hash[x[1].sort_by{|k,_| k.to_i }] ]
end