按照数组键对哈希数组进行排序

4

我正在尝试过滤和重新排序哈希数组。过滤和排序由另一个字符串数组定义,该数组表示哈希的"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"
  }
]

第二个数组如下:

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}

但我找不到一个聪明的方法来获取有序的那一个。有什么想法吗?
1个回答

11

使用map函数将您的有序键数组转换为相应的哈希表。输入数组在map中的顺序决定了输出数组的顺序。

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

是的!这正是我在寻找的。一种聪明而简洁的方法来获得结果。太棒了! - Stefano Ortisi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接