2013-04-22 112 views
4

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

话,结果应该是这样的一个数组:

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} 

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

回答

11

使用map将您的有序键数组转换为相应的散列值。输入数组的顺序为map定义输出数组的顺序。

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

是的!这正是我所期待的。一个聪明而简洁的方式来获得结果。真棒! – 2013-04-22 23:15:27