Как поделить список на 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();
            }
        }
    }

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


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

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

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