Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何从哈希中删除nil密钥?_Arrays_Ruby_Hash_Null_Key - Fatal编程技术网

Arrays 如何从哈希中删除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键并仍然获得正确的结果?使用它删除计

在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键并仍然获得正确的结果?

使用它删除计数之前的所有
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密钥?这听起来像是一个“”,您应该询问哈希的生成,而不是如何清理它。