由另一个数组排序哈希数组

art*_*net 1 ruby csv arrays hash

我有2个数组,一个哈希数组另一个键数组.我需要使哈希数组与键数组的顺序相同.我该怎么做

header = ["header1", "header2", "header3", "header4", "header5"]
record = [{"header4" =>"value4"}, {"header3" =>"value3"}, {"header5"=>"value5"}, {"header1"=>"value1"}, {"header2"=>"value2"}]
Run Code Online (Sandbox Code Playgroud)

我需要数组记录与数组头的顺序相同

record = [{"header1" =>"value1"}, {"header2" =>"value2"}, {"header3"=>"value3"}, {"header4"=>"value4"}, {"header5"=>"value5"}]
Run Code Online (Sandbox Code Playgroud)

非常感谢每一个人的帮助.我想在这篇文章中再添一个问题.我正在尝试使用下面建议的方法从数据库创建CSV文档.所以我想按特定的顺序组织列,我有这个顺序的模板,这个模板存储为标题数组,但是当我这样做时

csv<< mymodel.attributes.values.sort_by! { |h| header.index(h.keys[0])
Run Code Online (Sandbox Code Playgroud)

这是行不通的

fal*_*tru 5

Array#sort_by!/ Enumerable#sort_by接受一个块.块的返回值用于比较.对于您的情况,您可以使用Array#index.

header = ["header1", "header2", "header3", "header4", "header5"]
record = [{"header4" =>"value4"}, {"header3" =>"value3"},
          {"header5"=>"value5"}, {"header1"=>"value1"},
          {"header2"=>"value2"}]
record.sort_by! { |h| header.index(h.keys[0]) }
# => [{"header1"=>"value1"}, {"header2"=>"value2"}, {"header3"=>"value3"},
#     {"header4"=>"value4"}, {"header5"=>"value5"}]
Run Code Online (Sandbox Code Playgroud)