打印时获取多个数据实例(Ruby)

时间:2012-11-23 22:20:52

标签: ruby arrays

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次?提前谢谢。

1 个答案:

答案 0 :(得分: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

看看是否会产生一些有用的东西。