あなたは[number, letter]
によって周り_
とソートを分割し、ファイルのベース名を得ることができます:
# filenames = Dir.glob('input/*')
filenames = ["input/a_6", "input/b_8", "input/b_7", "input/a_3", "input/a_4", "input/b_4", "input/b_9", "input/b_1", "input/b_11", "input/a_11", "input/b_3", "input/b_2", "input/a_1", "input/b_6", "input/b_12", "input/a_8", "input/a_2", "input/a_9", "input/a_5", "input/b_10", "input/a_7", "input/b_5", "input/a_10", "input/a_12"]
filenames.sort_by! do |filename|
letter, number = File.basename(filename).split('_')
[number.to_i, letter]
end
p filenames
# ["input/a_1", "input/b_1", "input/a_2", "input/b_2", "input/a_3", "input/b_3", "input/a_4", "input/b_4", "input/a_5", "input/b_5", "input/a_6", "input/b_6", "input/a_7", "input/b_7", "input/a_8", "input/b_8", "input/a_9", "input/b_9", "input/a_10", "input/b_10", "input/a_11", "input/b_11", "input/a_12", "input/b_12"]
私は通常、異なるフォルダに入力ファイルやスクリプトを置くのが好き。
最後に、"3".to_i
と"3.txt".to_i
は両方とも3
を返すので、このコードは任意の拡張子(拡張子を含まない)で動作するはずです。明示的なソートなし
ただ、好奇心のうち
あなたは 'File.open( "_#{I} .TXT"、 "R")'のようなものが必要なのでしょうか? 'i'は変更されますが、ファイル名も変更され、新しい繰り返しごとに新しいファイルを読み込むことができます。このスニペットを確認してください - https://repl.it/HTfV – marmeladze
@marmeladzeこれは 'a_1.txt'、' a_2.txt'、 'a_3.txt'などを開きますが、OPは' a_1.txt'、 b_1.txt'、 'a_2.txt'、' b_2.txt'、... – Stefan