排序使用字符串的数值数组它包含

问题描述:

我有一个名为highscore.txt文件,该文件会被读入程序,并放入数组。问题是我无法对数组排序,因为.txt文件中的点是作为字符串读取的,而不是整数......我该如何解决这个问题?排序使用字符串的数值数组它包含

highscore.txt

Nico,11\nLuis,7...

代码:

@Bestenliste.each do |stat| 
    @sorted = @sorted + [stat.to_s.split(",")] 
end 
@sorted = @sorted.sort {|a,b| a[1] <=> b[1]} 
@sorted.each do |stat2| 
    puts stat2[0].to_s + " | " + stat2[1].to_s 
end 

随着stat.to_s.split我分裂一条线(Nico,10)分成两个对象,但10将是一个字符串,所以我不能排序阵列了。

是的,我做这在相当复杂的方式,因为我是新来的Ruby。 ^^

+1

注意显示你试过的代码? – 2014-12-04 14:06:20

+0

编辑后 – Splinti 2014-12-04 14:24:07

+0

你可以得到你上面的代码仅通过修改此行'@sorted.sort {工作| A,B | [1] b [1]}'to'@sorted.sort {| a,b | a [1] .to_i b [1] .to_i}'。虽然你可以按照@ avlazarov的答案,因为他是正确的。但是,如果你只是想你的退出代码工作,那么你可以做上面的 – 2014-12-04 14:44:38

做到这一点,最简单的方法是将转换转换字符串为整数然后再比较它们。在您发布的代码,这将是作为附加一个.to_i到你在该行的数组排序比较值作为简单:

@sorted = @sorted.sort {|a,b| a[1].to_i <=> b[1].to_i} 

你似乎虽然已经意识到,Ruby是一个非常强大的语言。有更多可读,紧凑的方式来做你所做的事情。例如,一个你所描述的程序可以很容易地在一行或两行中实现:

highscores = File.readlines('highscore.txt').map{|line| line.split(',') } 
puts highscores.sort_by{|_, score| score.to_i}.map{|pair| pair.join(" | ")} 

array.sort_by(&:to_i) - 将通过调用#to_i每一个字符串数组排序,并在琴弦 array.map(&:to_i).sort还是回到了得分的阵列 - 相同,但将返回整数

数组

编辑:或者使用to_f代替的to_i如果分数彩车

+0

会不会是把整个数组整数?我只想数字转换 – Splinti 2014-12-04 14:34:13

+0

然后,只需'array.map(to_f)',其中'array'持有的得分您的字符串值 – avlazarov 2014-12-04 14:37:18

您可以将字符串转换为不同的类型。可能是整数或浮点数..

此文件:

75.89 
87.23 
81.98 
99.40 
45.81 

看看从IRB这个片段:

1.9.3-p194 :016 > File.readlines('test.txt').each do |line| 
1.9.3-p194 :017 > puts "#{line} - #{line.class}" 
1.9.3-p194 :018?> puts "#{line.to_i} - #{line.to_i.class}" 
1.9.3-p194 :019?> puts "#{line.to_f} - #{line.to_f.class}" 
1.9.3-p194 :020?> end 
75.89 - String 
75 - Fixnum 
75.89 - Float 
87.23 - String 
87 - Fixnum 
87.23 - Float 
81.98 - String 
81 - Fixnum 
81.98 - Float 
99.40 - String 
99 - Fixnum 
99.4 - Float 
45.81 - String 
45 - Fixnum 
45.81 - Float