Как уже упоминалось: хэши не упорядочены (по крайней мере, в ruby 1.8).
Ruby 1.9 имеет упорядоченные хэши, поэтому обновление может помочь для последовательности.
Или с ruby 1.8Вы можете изменить массивы (см. другие ответы) или мою рекомендацию: сортируйте хэш:
csv_data.sort.each do |row|
#...
Другая проблема: Вы проверяли содержимое csv_data
?
Когда я использую вашпрограмму и данные я получаю {"1 95"=>"1 95", "2 95"=>"2 95", ...
.Я думаю.это не тот результат, который вам нужен.
Вы делаете split(',')
, но показанные вами данные разделены пробелом, поэтому я бы использовал split(' ')
.
Когда вы это сделали, csv_data
содержит данные, вам не нужны переменные data
или fields
.
Следующий MWE заменяет файл на DATA, но показывает принцип:
csv_data = {}
#~ File.open(CSV_FILENAME, "r").each_line do |line|
DATA.each_line do |line|
line = line.strip.split(' ')
csv_data[line.first.to_s] = line.last.to_i
end
#check the data
#~ p csv_data
csv_data.sort.each do |row, col|
puts "Point: #{row} - #{col}"
end
#If
fields = csv_data.keys
data = csv_data.values
__END__
1 95
2 95
3 95
4 85
5 81
6 81
7 84
8 92
9 85