如何从哈希中删除 nil 密钥?



在 Ruby 2.4 中,我想计算元素的出现次数并将它们存储在哈希中。 但是,我不想在我的哈希中包含任何 nil 键。 所以我尝试了

my_hash = int_data_col.each_with_object(Hash.new(0)) { |i, h| h[i]+=1 }.delete(nil)

但这返回"1"。 如果我省略"delete(nil)",它会返回一个哈希,但随后哈希中包含 nil 键(假设"int_data_col"数组中存在 nil)。 如何从哈希中删除 nil 键并仍然获得正确的结果?

使用Array#compact删除计数之前的所有nil值。

my_hash = int_data_col.compact.each_with_object(Hash.new(0)) { |i, h| h[i]+=1 }

在 Ruby 2.4 中,有一种方法非常可读:

arr.compact.group_by(&:itself).transform_values(&:size)

如果要在散列数组之前清理数组,则

int_data_col.compact! 
int_data_col.each_with_object(Hash.new(0)) {|i, h| h[i]+=1 }

如果你想简单地创建哈希,忽略nil,而不干扰原始数组,那么按照@sagarpandya82的建议执行以下操作

int_data_col.compact.each_with_object(Hash.new(0)) { |i, h| h[i]+=1 }

当您指定.delete(nil)时,我认为您希望它返回删除 nil 键的哈希值。但它所做的是删除 nil 键并返回 nil 键 (1) 的计数值。来自哈希类文档,"删除键值对,并从键等于键的哈希返回值。

相关内容

  • 没有找到相关文章