Удаление дубликатов в clojure - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть последовательность и пытается удалить дубликаты

case 1: 

(vec (into #{} [1 1 2 2 3 3])) ; => [1 2 3]


case 2:

(distinct [1 1 2 2 3 3]) ; => [1 2 3]
  1. Оба случая приносят результаты, так какой из них лучше использовать?
  2. Какая разница между ними?

1 Ответ

0 голосов
/ 30 апреля 2018

Что касается различий, Джас рассказал о большинстве из них в своем комментарии:

  1. distinct ленивый
  2. distinct без аргументов - преобразователь
  3. distinct поддерживает порядок

Что касается того, какой из них предпочтителен, distinct по вышеуказанным причинам, а также потому, что объясняет, что вам нужно. Я забыл, в какой книге на Лиспе об этом говорилось (возможно, это была Let Over Lambda ), но когда предоставляется выбор между двумя похожими функциями, предпочтите ту, которая более конкретна. distinct объясняет, что вам нужны разные элементы. (into #{} xs) может выдавать разные значения, но также позволяет неправильно понять ваше намерение. Кто-то может легко подумать, что вам нужен набор по какой-то причине. distinct сужает почему .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...