Ruby 按数组键对哈希数组排序

Ruby 按数组键对哈希数组排序,ruby,arrays,Ruby,Arrays,我正在尝试对哈希数组进行过滤和重新排序。过滤器和顺序由另一个字符串数组定义,这些字符串表示散列的“slug”键的值。结果数组应仅包含其“slug”键的值包含在slug数组中并按相同顺序排序的散列。如果第一个数组为: data = [ { "slug" => "lemon", "label" => "Lemon Label" }, { "slug" => "table", "label" => "Table Label" },

我正在尝试对哈希数组进行过滤和重新排序。过滤器和顺序由另一个字符串数组定义,这些字符串表示散列的
“slug”
键的值。结果数组应仅包含其
“slug”
键的值包含在slug数组中并按相同顺序排序的散列。如果第一个数组为:

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"
  }
]
ordered_keys = ["orange", "lemon", "strawberry"]
第二个数组为:

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"
  }
]
ordered_keys = ["orange", "lemon", "strawberry"]
然后,结果应该是如下所示的数组:

result = [
  {
    "slug" => "orange",
    "label" => "Orange Label"
  },
  {
    "slug" => "lemon",
    "label" => "Lemon Label"
  },
  {
    "slug" => "strawberry",
    "label" => "Strawberry Label"
  }
]
我通过以下方式获得了过滤功能:

result = data.select{|x| ordered_keys.include? x.slug}

但我找不到一个聪明的方法来订购。有什么想法吗?

使用
map
将有序键数组转换为相应的哈希。输入数组到映射的顺序定义了输出数组的顺序

ordered_keys.map{|k| data.find{|h| h["slug"] == k}}

对这正是我想要的。一个聪明而简洁的方法来获得结果。令人惊叹的!