2013-02-02 41 views
16

Tôi mới dùng Clojure. Xin lỗi nếu đó là một câu hỏi ngu ngốc!Danh sách Clojure so với vector so với số

Tôi có nên sử dụng tập hợp thay vì véc tơ hoặc liệt kê mỗi lần tôi không quan tâm đến thứ tự của các mục không? Các tiêu chuẩn chung để quyết định giữa ba điều này là gì khi không cần thiết?

+1

Xin cảm ơn các bạn, tất cả các câu trả lời tuyệt vời tôi đã bỏ phiếu cho mọi câu trả lời. – Blacksad

Trả lời

19

Nó thực sự phụ thuộc vào cách bạn sẽ sử dụng các mục.

  • Nếu bạn sẽ tìm kiếm các mục, hãy sử dụng một bộ.
  • Nếu bạn sẽ xử lý tuần tự, hãy sử dụng danh sách.
  • Nếu bạn sẽ cắt nó thành các khối chẵn (ví dụ như khi sắp xếp), hãy sử dụng một véc-tơ.
  • Nếu bạn cần tính thời lượng sử dụng vectơ.
  • Nếu bạn sẽ gõ những bằng tay sử dụng một vector (để tiết kiệm một chút trích dẫn)

Trong thực tế hầu hết các xử lý tôi thấy liên quan đến việc chuyển dữ liệu vào một seq và chế biến mà nên phân biệt giữa danh sách và vector thường là một vấn đề cá nhân.

+3

Bộ cũng được tính. – amalloy

+1

Danh sách cũng được tính. – kotarak

9

Nói chung, bạn muốn một bộ khi mối quan tâm chính của bạn là "Có phải điều này trong nhóm này không?" Bên cạnh đó không giữ gìn trật tự, bộ cũng chỉ giữ một giá trị nhất định một lần. Vì vậy, nếu bạn quan tâm đến vị trí chính xác của các giá trị, một vector là nhiều hơn những gì bạn muốn. Nếu bạn chủ yếu quan tâm đến việc kiểm tra tư cách thành viên, một tập hợp thích hợp hơn.

2

Có, sử dụng một bộ. Trừ khi bạn có lý do rất, rất tốt để chọn một cái gì đó khác (hiệu suất, sử dụng bộ nhớ, ...) bộ này là sự lựa chọn đúng đắn.

Hãy nhớ rằng lập trình chủ yếu là về giao tiếp với người đọc mã của bạn chứ không phải với máy tính. Bằng cách sử dụng một bộ bạn làm cho nó hoàn toàn rõ ràng rằng thứ tự của các yếu tố là không liên quan (và bạn không mong đợi giá trị trùng lặp) giúp người đọc hiểu được ý định của bạn và tâm trí của riêng bạn thiết lập.

Các vấn đề liên quan