2010-12-01 3 views
0

Je ne cesse de me dire qu'il doit y avoir un meilleur moyen mais je ne peux pas le voir maintenant .. des idées?A Une façon plus élégante de faire cela?

i = 0; lose = 0; win = 0 
while i < @array.size 
    results = @array[i].results 
    q = 0 
    while q < results.size 
    if results[q].to_i == 0 then 
     lose += 1 
    elsif results[q].to_i == 1 then 
     win += 1 
    else 
     puts results[q] 
     puts "false" 
    end 
    q += 1 
    end 
    i+=1 
end 
if win == lose then 
    puts "true" 
else 
    puts "false" 
end 

Répondre

5

Vous pouvez utiliser array.each au lieu de boucles while.

Vous pouvez utiliser array.count au lieu d'inspecter manuellement chaque tableau:

lose = results.count { |r| r.to_i == 0 } 
win = results.count { |r| r.to_i == 1 } 

# or possibly if the array can only contain wins and losses 
win = results.count - lose 
+1

si élégant! :) Exactement ce que je cherchais! Merci. – Skizit

+0

1. Où est l'impression d'éléments non -0/1? 2. 'count' peut être utilisé sans' select' 3. Le tableau initial n'est pas unidimensionnel. – Nakilon

+0

Oui, 'count' est meilleur que' select'. En ce qui concerne les réponses non 0/1, je pense que le PO peut le comprendre. StackOverflow est pour le conseil et la direction, pas pour écrire le code d'autres personnes. –

0

vous avez fourni seulement 0 et 1 dans vos tableaux, vous pourriez en théorie ajouter simplement les valeurs de toutes les entrées .to_i, vérifiez si cette valeur est exactement la moitié du nombre total d'entrées dans vos tableaux . C'est difficile de dire s'il y a une meilleure façon de le faire sans connaître plus d'informations. Est-ce que les comptes gagnés et perdus sont utilisés n'importe où après? Est-ce une fonction qui revient tout de suite ou est-ce intégré dans une fonction plus grande? Est-ce que tous vos tableaux de résultats sont exactement de la même taille? Salutations et codage heureux!

1
f = @array.flatten 
puts (f.count('0') == f.count('1')) 
puts f-%w{0 1} 
0

Fractionnement un tableau en deux parties selon certains test peut être fait en utilisant Enumerable#partition:

win, lose = results.partition {|r| r.to_i == 1}.map(&:size) 
Questions connexes