Подскажите как быстро соединить две отсортированные коллекции - C#
Формулировка задачи:
привет
есть штук 10 коллекций объектов отсортированных по полю datatime
суммарное количество элементов - 30 000 000
подскажите как быстрее всего собрать из этих коллекций в одну - отсортированную по этому же полю
Решение задачи: «Подскажите как быстро соединить две отсортированные коллекции»
textual
Листинг программы
static IEnumerable<T> Merge<T>(IEnumerable<IEnumerable<T>> collections, IComparer<T> comparer = null)
{
if (comparer == null)
comparer = Comparer<T>.Default;
var result = new List<T>();
var iters = new List<IEnumerator<T>>();
foreach (var collection in collections)
{
var iter = collection.GetEnumerator();
if (iter.MoveNext())
iters.Add(iter);
else
iter.Dispose();
}
while (iters.Count > 0)
{
var min = iters[0];
for (int i = 1; i < iters.Count; i++)
{
if (comparer.Compare(iters[i].Current, min.Current) < 0)
min = iters[i];
}
result.Add(min.Current);
if (!min.MoveNext())
{
iters.Remove(min);
min.Dispose();
}
}
return result;
}