2 votes

Comment le faire à la manière de Ruby : Compter le nombre d'occurrences de a dans b

Voici l'extrait de code que j'utilise actuellement :

def countOccurences(a, b)
  #counts the number of occurences of a in b 
  count=0
  cur=0
  while cur < b.length do
    temp=b.index(a, cur)
    if temp == nil
      break
    end
    count=count+1
    cur=temp+a.length
  end
  return count
end

Existe-t-il une fonction Ruby qui permet de faire cela ? Un équivalent fonctionnel ? Ou quelque chose de mieux ?

9voto

James Points 886

Si a et b sont des chaînes de caractères :

b.scan(a).length

4voto

Steve Gilham Points 7829

Le moyen le plus évident

enum.find_all {| obj | block } => array

plus

array.length

ou vous pouvez simplement le faire avec un pli

enum.inject {| memo, obj | block } => obj

3voto

August Lilleaas Points 25812

Je suppose que b est un tableau et b est un objet à rechercher dans le tableau.

ary = ["foo", "bar", "baz", "foo", "foo", "maz"]
look_for = "foo"

p a.detect {|i| i == look_for }.length
# => 3

Vous pouvez également ajouter cette option dans Array .

class Array
  def occurrences_of(object)
    detect {|i| i == object }.length
  end
end

p ["foo", "bar", "baz", "foo", "foo", "maz"].occurrences_of("foo")
# => 3

-2voto

Jamie Rumbelow Points 2815

Il suffit de boucler le tableau en utilisant each, et de créer un tableau avec la clé "a" et count comme valeur. Ensuite, il suffit de retourner le nombre.

def count_occurences(a, b)
  r = Array.new
  b.eachdo |e|
    if e == a 
      r[e]++
    end
  end
end

Ça devrait le faire !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X