通过数组键排序哈希数组

Ste*_*isi 4 ruby arrays

我正在尝试过滤和重新排序哈希数组.过滤器和顺序由另一个字符串数组定义,这些字符串表示"slug"散列键的值.生成的数组应该只包含散列,其值的值"slug"包含在slugs数组中,并以相同的顺序排序.如果我有第一个数组:

data = [
  {
    "slug" => "lemon",
    "label" => "Lemon Label"
  },
  {
    "slug" => "table",
    "label" => "Table Label"
  },
  {
    "slug" => "peach",
    "label" => "Peach Label"
  },
  {
    "slug" => "strawberry",
    "label" => "Strawberry Label"
  },
  {
    "slug" => "bread",
    "label" => "Bread Label"
  },
  {
    "slug" => "orange",
    "label" => "Orange Label"
  }
]
Run Code Online (Sandbox Code Playgroud)

和第二个数组:

ordered_keys = ["orange", "lemon", "strawberry"]
Run Code Online (Sandbox Code Playgroud)

那么,结果应该是这样的数组:

result = [
  {
    "slug" => "orange",
    "label" => "Orange Label"
  },
  {
    "slug" => "lemon",
    "label" => "Lemon Label"
  },
  {
    "slug" => "strawberry",
    "label" => "Strawberry Label"
  }
]
Run Code Online (Sandbox Code Playgroud)

我设法得到了这个过滤功能:

result = data.select{|x| ordered_keys.include? x.slug}
Run Code Online (Sandbox Code Playgroud)

但我找不到一个聪明的方法来获得有序的.有任何想法吗?

saw*_*awa 11

用于map将有序键的数组转换为相应的哈希值.输入数组map的顺序,用于定义输出数组的顺序.

ordered_keys.map{|k| data.find{|h| h["slug"] == k}}
Run Code Online (Sandbox Code Playgroud)