Допустим, у меня есть список
def letters = 'a' .. 'g'
Я знаю, что могу использовать сортировку для создания списка подсписков одинакового размера (плюс остаток).
assert letters.collate(3) == [['a', 'b', 'c'], ['d', 'e', 'f'], ['g']]
Но я хочу получить список с указанным c размером подсписков, где элементы исходного списка разделены на подсписки, которые настолько велики, насколько это необходимо для получения наиболее равномерного распределения подсписка. размер. Пример:
def numbers = 1..7
assert numbers.collateIntoFixedSizedList(5) == [[1,2], [3,4], [5], [6], [7]]
// the elements that contain two items could be at the end of the list as well
// doesn't matter much to me
assert numbers.collateIntoFixedSizedList(5) == [[1], [2], [3], [4,5], [6,7]]
Списки, размер которых меньше max_size, приведут к списку того же размера, что и оригинал списков из одного элемента:
def numbers = 1..7
assert numbers.collateIntoFixedSizeList(10) == [[1],[2],[3],[4],[5],[6],[7]]
Кто-нибудь знает, есть ли такие волхвы c существует или мне придется самому кодировать это?