Вам нужно прочитать файл в массив, сделать некоторые манипуляции, а затем записать обратно в файл.
Предполагая, что исходный файл содержит пары строк, как показано ..
Сначала прочитайте строки файла в массив, Файл # readlines (примечание, chomp: true
для удаления "\n"
).
data = File.readlines('score.txt', chomp: true)
#=> ["player1", "10", "player2", "13", "player3", "60"]
Получив массив, сгруппируйте каждые два элемента ( Enumerable # each_slice ) и отсортируйте по второму элементу, рассматриваемому как целое число (.to_i
) ( Enumerable # sort_by ) , Обратите внимание на знак -
для изменения порядка сортировки. В качестве последней операции map
( Enumerable # map ) для join
пары элементов во вложенном массиве ( Array # join ):
score_sorted = data.each_slice(2).sort_by { |_, score| -score.to_i}.map{ |ary| ary.join(' ') }
#=> ["player3 60", "player2 13", "player1 10"]
Наконец, запишите массив обратно в файл ( File # open ):
File.open("score_sorted.txt", "w+") { |f| f.puts score_sorted }