Эквивалент C ++’s stable_partition в clojure?

В C ++ в стандартной библиотеке есть функция, которая называется stable_partition это берет коллекцию и предикат. Он разделяет коллекцию и помещает элементы, для которых предикат возвращает true, в одном месте, и элементы, для которых предикат возвращает false, в другом месте, сохраняя при этом относительный порядок элементов.

Мне просто интересно, есть ли что-то подобное в стандартной библиотеке clojure. Я не могу найти такую ​​функцию, несмотря на мои поиски. Он может возвращать ленивую последовательность из двух небольших коллекций: одна коллекция содержит те элементы, для которых предикат возвращает true, а другая коллекция содержит те элементы, для которых предикат возвращает false.

Это может выглядеть так:

(stable-partition even? [1 2 3 4 5]) -> ([1 3 5] [2 4])

2

Решение

Простейшая версия этого, я думаю, такова:

(defn stable-partition [p? coll]
(map (group-by p? coll) [false true]))

Так как вы говорите

«Он делит коллекцию и помещает те элементы, для которых
предикат возвращает истину в одном месте и те элементы, для которых
предикат возвращает false в другом месте

возможно group-by сам по себе является ответом (поскольку векторы под ключами в хэш-карте являются местами в конце концов).

5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector