排序使用字符串的数值数组它包含
问题描述:
我有一个名为highscore.txt
文件,该文件会被读入程序,并放入数组。问题是我无法对数组排序,因为.txt文件中的点是作为字符串读取的,而不是整数......我该如何解决这个问题?排序使用字符串的数值数组它包含
highscore.txt
:
代码:
@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。 ^^
答
做到这一点,最简单的方法是将转换转换字符串为整数然后再比较它们。在您发布的代码,这将是作为附加一个.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(" | ")}
答
您可以将字符串转换为不同的类型。可能是整数或浮点数..
此文件:
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
注意显示你试过的代码? – 2014-12-04 14:06:20
编辑后 – Splinti 2014-12-04 14:24:07
你可以得到你上面的代码仅通过修改此行'@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