I'vにハッシュルビー/ RoRの - アレイ
{1=>true, 7=>false, 6=>true, 4=>false}
又は
[1, true], [7, false], [6, true], [4, false]]
又は
[true, false, true, false]
様配列を要素の発生をカウント。
配列内のtrue
の番号はどのようにして見つけることができますか?ハッシュについては
I'vにハッシュルビー/ RoRの - アレイ
{1=>true, 7=>false, 6=>true, 4=>false}
又は
[1, true], [7, false], [6, true], [4, false]]
又は
[true, false, true, false]
様配列を要素の発生をカウント。
配列内のtrue
の番号はどのようにして見つけることができますか?ハッシュについては
要素を数えるには、明らかにコレクションを反復処理する必要があります。 Hash
を反復処理すると、2つの要素Array
Sを生成するので、最初の二つは正確に実際には同じです:
[true, false, true, false].count(true)
このArray
:シンプルArray
ケースでは
{ 1 => true, 7 => false, 6 => true, 4 => false }.count(&:last)
[[1, true], [7, false], [6, true], [4, false]].count(&:last)
、あなたはこのような何かを行うことができます上記のHash
のHash#values
と同じですから、同じ方法を使用することもできます。
{ 1 => true, 7 => false, 6 => true, 4 => false }.values.count(true)
あなたはこのようなものを使用でき、あなたが得るであろう3の1わからない場合:
{ 1 => true, 7 => false, 6 => true, 4 => false }.flatten.count(true)
[[1, true], [7, false], [6, true], [4, false]].flatten.count(true)
[true, false, true, false].flatten.count(true)
:
{ :a => true, :b => true, :c => false }.select{ |k,v| v }.length
=> 2
アレイの場合:
[true, false, false, true, true].select{ |o| o }.length
=> 3
別の方法(否定とテスト):
[true, false, false, true, true].reject{ |o| o != true }.length
=> 3
一つの方法(あなたのハッシュは.to_a
をコールする必要があります最初にそれを処理するため):
[[1, true], [7, false], [6, true], [4, false]].flatten.select{|s| s == true }.size
:
より詳細なhash.values.count(true)
array_of_pairs.map { |k, v| v }.count(true)
plain_array.count(true)
が、中間の配列を作成しません:
hash_or_array_of_pairs.inject(0) { |acc, (k, v)| acc + (v == true ? 1 : 0) }
シンプル:
hash.values.count(true)
array.flatten.count(true)
これは、上記のすべての例で動作します。
ええのが、ペアを持つ配列の場合には、array.flatten.count(真)があります概念的には奇妙なことですが、これも鍵を考慮しています(ペアの最初の項目)。 – tokland
真実を含んでいる可能性のあるキーについて心配していたのであれば、これを行うことができます: 'Hash [array] .values。カウント(真) ' –
素晴らしいソリューション、答えを求めている皆のためにありがとう:) – sidney
簡単な1つ!ありがとうございました – Vlad