Как поделить список на N-списков по длине строк - C#

Узнай цену своей работы

Формулировка задачи:

Есть список в котором n-строк. Как поделить его на подсписки где суммарная длина символов <=40. Допустим есть слова,
Листинг программы
  1. абажур ткань потолок
  2. абажур ткань с
  3. абажур торшер вышивка
  4. абстрактные вышивка
  5. абстрактные вышивки
В итоге должно получиться следующее
Листинг программы
  1. [абажур ткань потолок
  2. абажур ткань с]
  3. [абажур торшер вышивка]
  4. [абстрактные вышивка
  5. абстрактные вышивки]
Нашел в сети код, который делит строку на части, только не совсем понятно как его применить ко списку
Листинг программы
  1. public static IEnumerable<string> SplitByLength(this string str, int maxLength) {
  2. for (int index = 0; index < str.Length; index += maxLength) {
  3. yield return str.Substring(index, Math.Min(maxLength, str.Length - index));
  4. }
  5. }

Решение задачи: «Как поделить список на N-списков по длине строк»

textual
Листинг программы
  1.     public class Program
  2.     {
  3.         public static IEnumerable<IEnumerable<string>> SplitByLength(IEnumerable<string> list, int maxLength)
  4.         {
  5.             var current = new List<string>();
  6.             int currentLength = 0;
  7.             foreach (var element in list)
  8.             {
  9.                 if (element.Length > maxLength)
  10.                 {
  11.                     throw new InvalidOperationException("The element has too long length");
  12.                 }
  13.                 if (element.Length + currentLength > maxLength)
  14.                 {
  15.                     yield return current.ToArray();
  16.                     current.Clear();
  17.                     currentLength = 0;
  18.                 }
  19.                 currentLength += element.Length;
  20.                 current.Add(element);
  21.             }
  22.             if (currentLength > 0)
  23.             {
  24.                 yield return current;
  25.             }
  26.         }
  27.        
  28.         public static void Main(string[] args)
  29.         {
  30.             var lstr = new List<string>();
  31.             lstr.Add("абажур ткань потолок");
  32.             lstr.Add("абажур ткань с");
  33.             lstr.Add("абажур торшер вышивка");
  34.             lstr.Add("абстрактные вышивка");
  35.             lstr.Add("абстрактные вышивки");
  36.             lstr.Add("абажур ткань потолок");
  37.             lstr.Add("абажур ткань с");
  38.             lstr.Add("абажур торшер вышивка");
  39.             lstr.Add("абстрактные вышивка");
  40.             lstr.Add("абстрактные вышивки");
  41.             foreach (var list in SplitByLength(lstr, 40))
  42.             {
  43.                 Console.WriteLine(string.Join(Environment.NewLine, list));
  44.                 Console.WriteLine();
  45.             }
  46.         }
  47.     }

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


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

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

13   голосов , оценка 4.154 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы