В C ++ в стандартной библиотеке есть функция, которая называется stable_partition
это берет коллекцию и предикат. Он разделяет коллекцию и помещает элементы, для которых предикат возвращает true, в одном месте, и элементы, для которых предикат возвращает false, в другом месте, сохраняя при этом относительный порядок элементов.
Мне просто интересно, есть ли что-то подобное в стандартной библиотеке clojure. Я не могу найти такую функцию, несмотря на мои поиски. Он может возвращать ленивую последовательность из двух небольших коллекций: одна коллекция содержит те элементы, для которых предикат возвращает true, а другая коллекция содержит те элементы, для которых предикат возвращает false.
Это может выглядеть так:
(stable-partition even? [1 2 3 4 5]) -> ([1 3 5] [2 4])
Простейшая версия этого, я думаю, такова:
(defn stable-partition [p? coll]
(map (group-by p? coll) [false true]))
Так как вы говорите
«Он делит коллекцию и помещает те элементы, для которых
предикат возвращает истину в одном месте и те элементы, для которых
предикат возвращает false в другом месте
возможно group-by
сам по себе является ответом (поскольку векторы под ключами в хэш-карте являются местами в конце концов).
Других решений пока нет …