2017-05-31 11 views
2

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キーを削除するにはどうしたら正しい結果が得られますか?

+0

どのようにゼロキーを取得するのでしょうか?これは "[XY問題](https://meta.stackexchange.com/q/66377/153968)"のように聞こえます。ここでは、ハッシュの生成方法について尋ねてください。 –

答えて

2

Array#compactを使用すると、カウント前にすべてnilの値が削除されます。

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

あなたが前にそれをハッシュに配列をクリーンアップする場合は、

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

あなたは、単にハッシュを作成したい場合は、元の配列を乱すことなく、nilを無視して、その後、次のようあなたは.delete(nil)指定した場合は

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

sagarpandya82 @によって提案され、私はあなたがそれを削除nilのキーでハッシュを返すように期待していたと思います。しかし、それがしたことは、無限の鍵を取り除き、無限の鍵(1)のカウント値を返したことでした。ハッシュクラスのドキュメントから、 "キーと値のペアを削除し、キーがキーと等しいハッシュから値を返します。"ルビー2.4で

+1

これは@ sagarpandya82の答えに何も追加しません。なぜNataliaが配列から 'nil'を取り除きたいのですか? –

2

は、非常に読みやすいですそれを行う方法があります:

arr.compact.group_by(&:itself).transform_values(&:size) 
関連する問題