Entrée: [1,2,2,3,4,2]
Comment obtenir un tableau d'index de occurences de même élément dans un tableau
Sortie: Index des 2 = [1,2,5]
Entrée: [1,2,2,3,4,2]
Comment obtenir un tableau d'index de occurences de même élément dans un tableau
Sortie: Index des 2 = [1,2,5]
Une méthode comme ceci:
def indexes_of_occurrence(ary, occ)
indexes = []
ary.each_with_index do |item, i|
if item == occ
indexes << i
end
end
return indexes
end
vous donne les suivantes :
irb(main):048:0> indexes_for_occurrence(a, 2)
=> [1, 2, 5]
irb(main):049:0> indexes_for_occurrence(a, 1)
=> [0]
irb(main):050:0> indexes_for_occurrence(a, 7)
=> []
Je suis sûr qu'il y a un moyen de le faire un seul (il y a les moyens semblent être!) mais cela fera l'affaire.
Une bonne réponse, une seule ligne, dépend de la version de Ruby que vous utilisez. 1,8:
require 'enumerator'
foo = [1,2,2,3,4,2]
foo.to_enum(:each_with_index).collect{|x,i| i if x == 2 }.compact
1,9:
foo = [1,2,2,3,4,2]
foo.collect.with_index {|x,i| i if x == 2}.compact
facile avec find_all
:
[1,2,2,3,4,2].each_with_index.find_all{|val, i| val == 2}.map(&:last) # => [1, 2, 5]
Remarque: Si vous utilisez Ruby 1.8.6, vous pouvez require 'backports/1.8.7/enumerable/find_all'
Vous pouvez faire .compacter au lieu de .reject {| x | x.nil? } ce qui le rendrait plus court. – Shadwell
Bonne prise. J'ai édité pour refléter votre suggestion, merci Shadwell :) – animal