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"
  }
]

2番目の配列は次のとおりです。

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}

しかし、注文したものを取得するスマートな方法が見つかりません。何か案は?

4

1 に答える 1

11

map順序付けられたキーの配列を対応するハッシュに変換するために使用します。map出力配列の順序を定義する入力配列の順序。

ordered_keys.map{|k| data.find{|h| h["slug"] == k}}
于 2013-04-22T18:22:03.267 に答える