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}}
对这正是我想要的。一个聪明而简洁的方法来获得结果。令人惊叹的!