2011-11-07 3 views
4

Je dois lire dans un fichier contenant une liste de nombres.Convertir le contenu d'un tableau en int

Ce code lit dans le fichier et le place dans un tableau 2d. Maintenant j'ai besoin d'obtenir la moyenne de tous les nombres dans mon tableau mais j'ai besoin de changer le contenu du tableau en int. Des idées où mettre la méthode to_i?

Class Terrain 
    def initialize file_name 
     @input = IO.readlines(file_name) #read in file 
     @size = @input[0].to_i 
     @land = [@size] 

     x = 1 
     while x <= @size 
      @land << @input[x].split(/\s/) 
      x += 1 
     end 
     #puts @land 
    end 
end 
+6

ce qui est arrivé à votre question précédente? http://stackoverflow.com/questions/7993821. C'est très similaire, pourtant vous n'y avez donné aucun retour, aucun commentaire, aucun vote, rien. Des solutions là-bas ont montré comment utiliser la carte mais vous continuez à utiliser un non-idiomatique alors que dans cette question. – tokland

+1

Pour compléter le commentaire de @ tokland, il est parfaitement acceptable de demander des précisions dans les commentaires si vous ne comprenez pas une réponse. –

Répondre

-3

avez-vous essayé

@land << @input[x].split(/\s/).strip.to_i 
+0

'strip' et' to_i' ne fonctionnent pas dans les tableaux. –

10

carte Juste votre tableau à des entiers:

@land << @input[x].split(/\s/).map(&:to_i) 

note côté

Si vous voulez obtenir la moyenne d'une ligne, vous pouvez effectuer les opérations suivantes:

values = @input[x].split(/\s/).map(&:to_i) 
@land << values.inject(0.0) {|sum, item| sum + item}/values.size 

ou utiliser ce qui suit, comme Marc-André aimablement fait remarquer dans les commentaires:

values = @input[x].split(/\s/).map(&:to_i) 
@land << values.inject(0.0, :+)/values.size 
+3

Meilleur et plus rapide pour l'utilisateur 'injecter (0.0,: +)' –

+2

J'étais curieux de connaître la partie "plus rapide" et j'ai fait un benchmark rapide (additionnant un tableau 1..1000000). L'utilisation de ': +' est environ 10% plus rapide. –