2014-12-04 82 views
0

我有一個名爲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

回答

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(" | ")} 
1

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

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