Как поделить список на N-списков по длине строк - C#
Формулировка задачи:
Есть список в котором n-строк. Как поделить его на подсписки где суммарная длина символов <=40.
Допустим есть слова,
В итоге должно получиться следующее
Нашел в сети код, который делит строку на части, только не совсем понятно как его применить ко списку
Листинг программы
- абажур ткань потолок
- абажур ткань с
- абажур торшер вышивка
- абстрактные вышивка
- абстрактные вышивки
Листинг программы
- [абажур ткань потолок
- абажур ткань с]
- [абажур торшер вышивка]
- [абстрактные вышивка
- абстрактные вышивки]
Листинг программы
- public static IEnumerable<string> SplitByLength(this string str, int maxLength) {
- for (int index = 0; index < str.Length; index += maxLength) {
- yield return str.Substring(index, Math.Min(maxLength, str.Length - index));
- }
- }
Решение задачи: «Как поделить список на N-списков по длине строк»
textual
Листинг программы
- public class Program
- {
- public static IEnumerable<IEnumerable<string>> SplitByLength(IEnumerable<string> list, int maxLength)
- {
- var current = new List<string>();
- int currentLength = 0;
- foreach (var element in list)
- {
- if (element.Length > maxLength)
- {
- throw new InvalidOperationException("The element has too long length");
- }
- if (element.Length + currentLength > maxLength)
- {
- yield return current.ToArray();
- current.Clear();
- currentLength = 0;
- }
- currentLength += element.Length;
- current.Add(element);
- }
- if (currentLength > 0)
- {
- yield return current;
- }
- }
- public static void Main(string[] args)
- {
- var lstr = new List<string>();
- lstr.Add("абажур ткань потолок");
- lstr.Add("абажур ткань с");
- lstr.Add("абажур торшер вышивка");
- lstr.Add("абстрактные вышивка");
- lstr.Add("абстрактные вышивки");
- lstr.Add("абажур ткань потолок");
- lstr.Add("абажур ткань с");
- lstr.Add("абажур торшер вышивка");
- lstr.Add("абстрактные вышивка");
- lstr.Add("абстрактные вышивки");
- foreach (var list in SplitByLength(lstr, 40))
- {
- Console.WriteLine(string.Join(Environment.NewLine, list));
- Console.WriteLine();
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д