Arrays 如何从哈希中删除nil密钥?
在Ruby 2.4中,我想计算元素的出现次数并将其存储在散列中。但是,我不想在哈希中包含任何nil键。所以我试过了Arrays 如何从哈希中删除nil密钥?,arrays,ruby,hash,null,key,Arrays,Ruby,Hash,Null,Key,在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键并仍然获得正确的结果?使用它删除计
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键并仍然获得正确的结果?使用它删除计数之前的所有nil
值
my_hash = int_data_col.compact.each_with_object(Hash.new(0)) { |i, h| h[i]+=1 }
如果要在散列数组之前清理该数组,则
int_data_col.compact!
int_data_col.each_with_object(Hash.new(0)) {|i, h| h[i]+=1 }
如果您想简单地创建散列,忽略nil,而不干扰原始数组,那么按照@sagarpandya2的建议
int_data_col.compact.each_with_object(Hash.new(0)) { |i, h| h[i]+=1 }
当您指定
.delete(nil)
时,我认为您希望它返回删除了nil键的哈希值。但它所做的是删除nil键并返回nil键的计数值(1)。从Hash类doc中,“删除键值对并从Hash中返回键值等于key的值。”在Ruby 2.4中,有一种方法非常可读:
arr.compact.group_by(&:itself).transform_values(&:size)
这对@sagarpandya82的答案没有任何补充。你认为Natalia为什么要从数组中删除
nil
?你将如何获得nil密钥?这听起来像是一个“”,您应该询问哈希的生成,而不是如何清理它。