@ToKoMoK

LINQ, Как разложить список на три максимально равных списка?

Исходные данные - список произвольной длины
L123 list (1, 5, 7, 3, 2, 9, 1)
Цель - разложить максимально равномерно в три списка
L1, L2, L3
Алгоритм
Сортируем L123 по убыванию L123 list (9 ,7, 5, 3, 2, 1, 1)
Ищем сумму L1, L2, L3 и в любой минимальный список добавляем первый элемент L123, и так далее.
Итог L1(9); L2(7, 2); L3(5, 3, 1, 1)
Как это реализовать на LINQ?
  • Вопрос задан
  • 121 просмотр
Решения вопроса 1
@ToKoMoK Автор вопроса
Спасибо. всем кому было интересно.
Решил все сам)

List<List<double>> L123 = new List<List<double>> { new List<double>(), new List<double>(), new List<double>() };
            new List<double>() { 1, 1, 2, 3, 5, 7, 9 }
               .OrderByDescending(a => a)
               .ToList()
               .ForEach(b =>
               {
                   L123
                  .ElementAt(L123
                            .Select((e, i) => new { e, i })
                            .Aggregate((f, s) => f.e.Sum() < s.e.Sum() ? f : s)
                            .i)
                  .Add(b);
               });
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы