我有一个名为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的新手。 ^^
答案 0 :(得分:1)
array.sort_by(&:to_i)
- 将为每个字符串调用#to_i
对数组进行排序,并返回仍在字符串中的分数数组
array.map(&:to_i).sort
- 相同但会返回一组ints
修改:如果分数为浮点数,则使用to_f
代替to_i
答案 1 :(得分:0)
您可以将字符串转换为其他类型。可能是整数或浮动..
对于此文件:
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
答案 2 :(得分:0)
最简单的方法是在比较字符串之前将字符串转换为整数。在您发布的代码中,这就像将.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(" | ")}