心中已經散列紅寶石/回報率 - 計數以陣列
{1=>true, 7=>false, 6=>true, 4=>false}
或類似
[1, true], [7, false], [6, true], [4, false]]
或
[true, false, true, false]
數組中的元素的出現。
如何找到數組中的true
s的數量?
心中已經散列紅寶石/回報率 - 計數以陣列
{1=>true, 7=>false, 6=>true, 4=>false}
或類似
[1, true], [7, false], [6, true], [4, false]]
或
[true, false, true, false]
數組中的元素的出現。
如何找到數組中的true
s的數量?
爲了計算元素,顯然必須遍歷集合。由於迭代一個Hash
產生兩個元素Array
S,前兩個實際上是完全一樣的:
{ 1 => true, 7 => false, 6 => true, 4 => false }.count(&:last)
[[1, true], [7, false], [6, true], [4, false]].count(&:last)
對於簡單Array
情況下,你可以做這樣的事情:
[true, false, true, false].count(true)
這Array
當然也與上面的Hash
中的Hash#values
相同,因此您可以使用相同的方法:
{ 1 => true, 7 => false, 6 => true, 4 => false }.values.count(true)
如果你不知道哪三選一,你會得到,你可以使用這樣的事情:
{ 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 2010-12-20 13:11:48
好吧,如果有人擔心可能包含true的鍵,就像它不可能,你可以這樣做:'Hash [array] .values。count(true)' – 2010-12-20 13:17:35
真棒解決方案,謝謝大家正在尋求答案:) – sidney 2014-06-21 17:51:52
簡單的一個!謝謝 – Vlad 2016-04-29 17:48:24