Masz na myśli coś takiego?
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4].count_all(3, 4) # => 7
Chociaż nie ma nic w podstawowej bibliotece Ruby, która zapewnia tę funkcję bezpośrednio, dodanie tej funkcji jest całkiem banalne.
Mogłeś po prostu napisać metodę pomocnika:
def count_all(array, values_to_count)
array.count { |el| values_to_count.include?(el) }
end
count_all([1, 2, 2, 3, 3, 3, 4, 4, 4, 4], [3, 4]) # => 7
Można zamiast tego użyć Ruby nowego refinements dodać metodę Array
kiedy trzeba go:
module ArrayExtensions
refine Array do
def count_all(*values_to_count)
self.count { |el| values_to_count.include?(el) }
end
end
end
# Then inside some module or class
using ArrayExtensions
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4].count_all(3, 4) # => 7
Albo możesz zdecydować się podjąć bardziej hacky ścieżki i modyfikować Array
bezpośrednio:
class Array
def count_all(*values_to_count)
self.count { |el| values_to_count.include?(el) }
end
end
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4].count_all(3, 4) # => 7
Możliwy duplikat [Ruby: Policz unikatowe elementy i ich wystąpienia w tablicy] (http://stackoverflow.com/questions/23294181/ruby-count-unique-elements-and-their-occurences-in-an- array) –
Pytanie zadeklarowane jako przykład jest podobne, ale nie jest właściwym duplikatem: Pytanie to pyta, jak znaleźć liczbę każdego odrębnego elementu, podczas gdy to pytanie prosi o sumę zliczeń wybranych elementów. –