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