Я видел некоторые действительно красивые примеры Ruby, и я пытаюсь изменить свое мышление, чтобы иметь возможность производить их, а не просто восхищаться ими. Вот лучшее, что я мог придумать для выбора случайной строки из файла:Ruby: Какой элегантный способ выбрать случайную строку из текстового файла?
def pick_random_line
random_line = nil
File.open("data.txt") do |file|
file_lines = file.readlines()
random_line = file_lines[Random.rand(0...file_lines.size())]
end
random_line
end
Я чувствую, что это должно быть возможно сделать это в более коротком, более элегантном способе без сохранения содержимого всего файла в памяти , Здесь?
Является ли это более «как я делаю этот _in Ruby_» или более «как это сделать в вопросе меньше чем O (N) space_»? Если последний, исследовать [выборки коллектора] (http://gregable.com/2007/10/reservoir-sampling.html). – zwol
моей тривиальной реализацией было бы искать случайную позицию в файле, а затем искать вперед в новой строке. –
@SamSaffron Это не даст вам равномерно случайную строку, если все строки не будут иметь одинаковую длину. – zwol