57 votes

Entrées impaires (ou paires) dans un tableau Ruby

Existe-t-il un moyen rapide et agréable d'obtenir toutes les autres entrées d'un tableau dans Ruby?

Les valeurs des entrées impaires ou paires avec 0 inclus dans l’impair.

J'aimerais pouvoir l'utiliser comme ça

 array1 += array2.odd_values
 

ou

 puts array2.odd_values.join("-")
 

par exemple

Mettre à jour

Cela donne exactement ce que je recherche, mais je suis sûr qu’il existe une version plus courte.

 array1.each_with_index do |item,index| 
  if (index %2 ==0) then 
    array2.push(item) 
  end
end
 

86voto

glenn jackman Points 69748
 a = ('a'..'z').to_a

a.values_at(* a.each_index.select {|i| i.even?})
# => ["a", "c", "e", "g", "i", "k", "m", "o", "q", "s", "u", "w", "y"]

a.values_at(* a.each_index.select {|i| i.odd?})
# => ["b", "d", "f", "h", "j", "l", "n", "p", "r", "t", "v", "x", "z"]
 

Donc, comme demandé

 class Array
  def odd_values
    self.values_at(* self.each_index.select {|i| i.odd?})
  end
  def even_values
    self.values_at(* self.each_index.select {|i| i.even?})
  end
end
 

71voto

Damien Roche Points 4664

...

 arr = ["0", "1", "2", "3"]
arr.select.each_with_index { |str, i| i.odd? }
arr.select.each_with_index { |str, i| i.even? }
 

22voto

James EJ Points 185
left,right = a.partition.each_with_index{ |el, i| i.even? }

18voto

Nikesh Ashar Points 1

Vous pouvez simplement utiliser ceci:

 (1..6).partition { |v| v.even? }  #=> [[2, 4, 6], [1, 3, 5]]
 

Ruby Docs: Référence Ruby Docs

9voto

AlexParamonov Points 340

Un moyen fou en utilisant des facettes:

 require 'facets'
array = [1,2,3,4,5]
odd = array.to_h.keys # 1,3,5
even = array.to_h.values.compact # 2,4
 

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