Как я могу удалить объект из последовательности в Clojure?

При использовании начальной загрузки приведенный ниже метод, без сомнения, является самым простым способом реализации адаптивного встраивания:


 

Документацию можно найти здесь: http://getbootstrap.com/components /#responsive-embed.

34
задан Robert Campbell 2 June 2009 в 12:39
поделиться

3 ответа

Не существует единого интерфейса для удаления элементов из всех типов структур данных Clojure, возможно, из-за различных характеристик производительности.

(disj #{:foo :bar} :foo)       ; => #{:bar}
(dissoc {:foo 1 :bar 2} :foo)  ; => {:bar 2}
(pop [:bar :foo])              ; => [:bar]
(pop (list :foo :bar))         ; => (:bar)

Они также работают (возвращая seq ):

(remove #{:foo} #{:foo :bar})      ; => (:bar)
(remove #{:foo} [:foo :bar])       ; => (:bar)
(remove #{:foo} (list :foo :bar))  ; => (:bar)

Это не работает для хэш-карт, потому что при итерации по карте вы получаете пары ключ / значение. Но это работает:

(remove (fn [[k v]] (#{:foo} k)) {:foo 1 :bar 2})  ; => ([:bar 2])
43
ответ дан 27 November 2019 в 16:53
поделиться

Посмотрите ссылку на Clojure, чтобы узнать о последовательностях . фильтр и удалить - это то, что вы ищете.

12
ответ дан 27 November 2019 в 16:53
поделиться

Как продолжение ответа Брайана Карпера. Это зависит от того, что вы будете делать с результатом. Если вы передаете результат чему-то, что хочет работать со всем набором данных (то есть распечатать его), идиоматично делать seq и использовать filter или remove для ленивого решения проблемы. Если, с другой стороны, вы изменяете структуру данных для сохранения для различных последующих применений, то создание seq на ней потеряет свои благоприятные характеристики обновления, поэтому в этом случае лучше использовать функцию обновления, специфичную для этой структуры данных.

2
ответ дан 27 November 2019 в 16:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: