Я новичок в Clojure. Извините, если это глупый вопрос!
Должен ли я использовать набор вместо вектора или списка каждый раз, когда меня не интересуют порядок элементов? Каковы общие критерии для выбора между этими тремя, когда заказ не нужен?
Ответ 1
Это зависит от того, как вы будете использовать элементы.
Если вы будете искать элементы, используйте набор.
Если вы будете обрабатывать его последовательно, используйте список.
Если вы будете рубить его на четные куски (например, при сортировке), используйте вектор.
Если вам нужно подсчитать длину, используйте вектор.
Если вы наберете их вручную, используйте вектор (чтобы сохранить небольшое цитирование)
На практике большая часть обработки, которую я вижу, включает в себя преобразование данных в seq и обработку, поэтому различия между списком и вектором часто являются личным вкусом.
Ответ 2
В общем, вам нужен набор, когда ваша основная проблема заключается в следующем: "Это вещь в этой группе?" Кроме того, не сохраняя порядок, множества также сохраняют только одно значение. Поэтому, если вы заботитесь о точном размещении значений, вектор больше того, что вы хотите. Если вы в основном заботитесь о тестировании членства, более подходящим является набор.
Ответ 3
Да, используйте набор. Если у вас нет очень-очень веских причин, чтобы выбрать что-то другое (производительность, использование памяти,...), это правильный выбор.
Помните, что программирование в основном связано с общением с человеческим читателем вашего кода, а не с компьютером. Используя набор, вы полностью понимаете, что порядок элементов не имеет значения (и вы не ожидаете повторяющихся значений), помогая читателю понять ваши намерения и ваш собственный ментальный разум.