Как поделить список на 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(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д