Ruby过滤哈希数组

时间:2015-07-01 13:43:10

标签: ruby ruby-on-rails-4 hash filter

我有以下参数数组,其中包含args键及其相关传递值的哈希值:

filtered_args_hash = {:include_blank=>true, :required=>true}

我需要过滤这个哈希只是为了获得这个例子中的一些键(例如:include_blank和:required),其相关值如下:

collection

因此include_blank arg被排除在外,只有我指定的requiredfilter_keys = %i(include_blank required) 才会返回。

更新

这是一个符号键数组,我需要根据它们进行过滤:

{{1}}

我怎么能这样做?

4 个答案:

答案 0 :(得分:2)

一种方法是使用Hash#keep_if

args_array[0].dup.keep_if {|k| filter_keys.include? k}
# => {:include_blank=>true, :required=>true}

请注意.dup此处是为了防止args_array被修改,如果您希望更新args_array,请不要使用它。

答案 1 :(得分:1)

以下内容应该可以解决您的问题:

 args_array.collect {|a| a if a[:include_blank] == true && a[:required=>true] == true }.compact

dup_list = args_array.dup
dup_list.delete_if {|a| !(a[:include_blank] == true && a[:required=>true] == true) }

答案 2 :(得分:1)

您标记为Rails,因此您可以使用Hash#slice

args_array[0].slice *filter_keys
# => {:include_blank=>true, :required=>true}

答案 3 :(得分:0)

args_array.map do |elem| 
  elem.select do |k, _| 
    %i(include_blank required).include? k
  end
end