Я предполагаю, что может быть намного больше данных, чем вы дали в своем примере. Если вы можете открыть все файлы одновременно, вы можете использовать этот алгоритм:
- Считайте первую строку из каждого файла, чтобы у вас было 10 строк в памяти, по одной из каждого файла.
- Поместить строки в приоритетную очередь по порядку сортировки.
- Извлечь наименьший элемент (отсортированный первым) из очереди приоритетов и записать в выходной файл.
- Считайте еще одну строку из соответствующего файла, откуда пришла строка, и поместите его в очередь с приоритетами.
- Повторяйте, пока все файлы не будут прочитаны до конца.
Обратите внимание, что вам не нужно считывать все файлы в память сразу, так что это будет хорошо работать, если у вас есть разумное количество больших файлов, но не если у вас много маленьких файлов.
Если у вас много маленьких файлов, вы должны объединить их в группы, чтобы создать один выходной файл для каждой группы, а затем повторить процесс объединения этих новых групп.
В C # вы можете использовать, например, SortedDictionary
для реализации очереди с приоритетами.