我有一个包含键和值的散列,如下所示:
hash = {"lili" => [] , "john" => ["a", "b"], "andrew" => [], "megh" => ["b","e"]}
正如我们所看到的,一些键的值是空数组。某些键具有数组值,其中数组 * 中 * 有实际值。我想遍历哈希值并生成一个新的哈希值,它只包含数组中有值的键(而不是空数组),我该怎么做呢?
uqzxnwby1#
您可以使用reject过滤出散列中值为空数组或值为nil的元素,然后迭代打印它们的内容;
reject
{:lili=>[], :john=>[:a, :b], :andrew=>[], :megh=>[:b, :e], :other=>nil} .reject { (_2 || []).empty? } .each { puts "#{_1} has the value(s) #{_2}" }
打印
john has the value(s) [:a, :b] megh has the value(s) [:b, :e]
to94eoyn2#
不确定所需的输出或确切的数据结构,但可以简单地将reject与empty?沿着使用,以删除任何包含空数组的hash值:
empty?
hash
hash = {"lili" => [] , "john" => ["a", "b"], "andrew" => [], "megh" => ["b","e"]} hash.reject {|k, v| v.empty?} #=> {"john"=>["a", "b"], "megh"=>["b", "e"]}
然而,需要注意的是,如果任何哈希值是nil,这种方法将不起作用。为了解决这种情况,我建议在使用rejectOR之前,使用compact删除任何具有空值的哈希元素,方法是测试nil?或empty?(并按此顺序):
nil
compact
nil?
hash = {"lili" => [] , "john" => ["a", "b"], "andrew" => [], "megh" => ["b","e"], "other" => nil} hash.reject {|k, v| v.empty?} #=> Evaluation Error: Ruby NoMethodError: undefined method `empty?' for nil:NilClass hash.compact.reject {|k, v| v.empty?} #=> {"john"=>["a", "b"], "megh"=>["b", "e"]} hash.reject {|k, v| v.empty? or v.nil?} #=> Evaluation Error: Ruby NoMethodError: undefined method `empty?' for nil:NilClass hash.reject {|k, v| v.nil? or v.empty?} #=> {"john"=>["a", "b"], "megh"=>["b", "e"]} hash.reject {|k, v| v.empty? || v.nil?} #=> Evaluation Error: Ruby NoMethodError: undefined method `empty?' for nil:NilClass hash.reject {|k, v| v.nil? || v.empty?} #=> {"john"=>["a", "b"], "megh"=>["b", "e"]}
b4wnujal3#
PRINT只打印键,但阅读帖子时,您尝试生成给定哈希的哈希子集。POST的TITLE的解决方案:
hash.each {|k,v| p k unless v.empty? }
如果你想生成一个新的哈希子集,请给予原始哈希:
hash.reject { |k,v| v.nil? || v.empty? }
如果您想打印生成的子集给予原始散列:
hash.reject { |k,v| v.nil? || v.empty? }.each { |k,v| p k }
3条答案
按热度按时间uqzxnwby1#
您可以使用
reject
过滤出散列中值为空数组或值为nil的元素,然后迭代打印它们的内容;打印
to94eoyn2#
不确定所需的输出或确切的数据结构,但可以简单地将
reject
与empty?
沿着使用,以删除任何包含空数组的hash
值:然而,需要注意的是,如果任何哈希值是
nil
,这种方法将不起作用。为了解决这种情况,我建议在使用reject
OR之前,使用compact
删除任何具有空值的哈希元素,方法是测试nil?
或empty?
(并按此顺序):b4wnujal3#
标题说:
PRINT只打印键,但阅读帖子时,您尝试生成给定哈希的哈希子集。
POST的TITLE的解决方案:
如果你想生成一个新的哈希子集,请给予原始哈希:
如果您想打印生成的子集给予原始散列: