2012-11-23 26 views
-1
file = File.open("file.dat") 
columns = [] 
file.each_line do |line| 
    columns << line.split(" ")[0 , 3] 
end 

print columns 
true_columns = columns[8..37] 
p true_columns 

true_columns.each do |data| 
    min_col = true_columns.min_by{|data| data[1].to_i - data[2].to_i} 
    print min_col[0] 
end 

當我試圖找到列之間的最小差異時,我得到30個相同的確切的答案。打印時獲取多個數據實例(紅寶石)

print true_columns 
    => [["1", "88", "59"], ["2", "79", "63"], ["3", "77", "55"], ["4", "77", "59"], ["5", "90", "66"], ["6", "81", "61"], ["7", "73", "57"], ["8", "75", "54"], ["9", "86", "32*"], ["10", "84", "64"], ["11", "91", "59"], ["12", "88", "73"], ["13", "70", "59"], ["14", "61", "59"], ["15", "64", "55"], ["16", "79", "59"], ["17", "81", "57"], ["18", "82", "52"], ["19", "81", "61"], ["20", "84", "57"], ["21", "86", "59"], ["22", "90", "64"], ["23", "90", "68"], ["24", "90", "77"], ["25", "90", "72"], ["26", "97*", "64"], ["27", "91", "72"], ["28", "84", "68"], ["29", "88", "66"], ["30", "90", "45"]] 

print min_col 
    => ["14", "61", "59"]["14", "61", "59"]["14", "61", "59"]["14", "61", "59"]["14", "61", "59"]["14", "61", "59"]["14", "61", "59"]["14", "61", "59"]["14", "61", "59"]["14", "61", "59"]["14", "61", "59"]["14", "61", "59"]["14", "61", "59"]["14", "61", "59"]["14", "61", "59"]["14", "61", "59"]["14", "61", "59"]["14", "61", "59"]["14", "61", "59"]["14", "61", "59"]["14", "61", "59"]["14", "61", "59"]["14", "61", "59"]["14", "61", "59"]["14", "61", "59"]["14", "61", "59"]["14", "61", "59"]["14", "61", "59"]["14", "61", "59"]["14", "61", "59"] 

print min_col[0] 
    =>141414141414141414141414141414141414141414141414141414141414 

如何以及爲什麼代碼每次打印時會出現30次?提前致謝。

+2

目前還不清楚這段代碼的目的是什麼,但是你打電話給'print'(它不插入換行符),你打印出總是14的'min_col'的第一個元素,並且你在一個循環中。 –

回答

0

min_by方法執行所有循環。改變此位:

true_columns.each do |data| 
    min_col = true_columns.min_by{|data| data[1].to_i - data[2].to_i} 
    print min_col[0] 
end 

min_col = true_columns.min_by{|data| data[1].to_i - data[2].to_i} 
p min_col 

看看是否能在一些有用的結果。