Подскажите как быстро соединить две отсортированные коллекции - 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;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.571 из 5
Похожие ответы