我有以下参数数组,其中包含args键及其相关传递值的哈希值:
filtered_args_hash = {:include_blank=>true, :required=>true}
我需要过滤这个哈希只是为了获得这个例子中的一些键(例如:include_blank和:required),其相关值如下:
collection
因此include_blank
arg被排除在外,只有我指定的required
和filter_keys = %i(include_blank required)
才会返回。
更新
这是一个符号键数组,我需要根据它们进行过滤:
{{1}}
我怎么能这样做?
答案 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