我是哈希
{1=>true, 7=>false, 6=>true, 4=>false}
或类似
的数组 [1, true], [7, false], [6, true], [4, false]]
或
[true, false, true, false]
。
如何在阵列中找到true
的数量?
答案 0 :(得分:23)
为了计算元素,你显然必须遍历集合。由于迭代Hash
会产生两个元素Array
,前两个实际上完全相同:
{ 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#values
中的Hash
相同,因此您可以使用相同的方法:
{ 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)
答案 1 :(得分:6)
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) }
答案 2 :(得分:4)
简单:
hash.values.count(true)
array.flatten.count(true)
这适用于以上所有情况。
答案 3 :(得分:1)
哈希:
{ :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
答案 4 :(得分:1)
一种方法(你的哈希需要首先调用它.to_a
才能使用它):
[[1, true], [7, false], [6, true], [4, false]].flatten.select{|s| s == true }.size
答案 5 :(得分:0)