我的params
看起来像这样:
params = [{:limit=>5}, {:skip=>0}, {:asc=>""}, {:desc=>""}]
我想删除值为0
的哈希元素或空字符串。我试过了:
params.reject { |h| h.values !== 0 }
但是这给了我一个语法错误
也尝试过:
params.select { |h| h.values != 0 || h.values != "" }
但这没有给我什么。我做错了什么?
答案 0 :(得分:3)
你有一个哈希数组,所以你必须对每个哈希进行操作。
params.reject { |hash| hash.any? { |_, v| [0, ''].include?(v) }}
#=> [{:limit=>5}]
答案 1 :(得分:2)
您可以只合并所有哈希值来获取一个大哈希值,而不是只有一对|key,value|
的哈希数组。
删除不需要的值变得更加容易,并且提取信息也变得更加容易:
params = [{ limit: 5 }, { skip: 0 }, { asc: '' }, { desc: '' }]
hash = params.inject(&:merge).reject{|_, value| value == 0 || value == '' }
# => {:limit=>5}
hash[:limit]
# => 5
使用哈希数组,你必须写:
(h = array_of_hashes.find{|h| h.keys.include?(:limit)} ) && h[:limit]
#=> 5
答案 2 :(得分:0)
我找到了两种方法:
filtered = params.reject { |hash| hash.values.any? { |v| v.to_i == 0 } }
和
filtered = params.select { |hash| hash.values.none? { |val| val == '' || val == 0 } }
答案 3 :(得分:0)
使用带有include的拒绝也可以解决这个问题。
params.reject { |key| key.values.include?(0) || key.values.include?("") }