在 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) 的计数值。来自哈希类文档,"删除键值对,并从键等于键的哈希返回值。