2013-02-02 17 views
16

Ich bin neu in Clojure. Entschuldigung, wenn es eine dumme Frage ist!Clojure Liste vs. Vektor vs. Set

Sollte ich jedes Mal ein Set anstelle eines Vektors oder einer Liste verwenden, ist mir die Reihenfolge der Elemente egal? Was ist das gemeinsame Kriterium, um zwischen diesen drei zu entscheiden, wenn eine Bestellung nicht notwendig ist?

+1

Danke Jungs, alle tollen Antworten Ich habe jede Antwort aufgefrischt. – Blacksad

Antwort

19

Es hängt wirklich davon ab, wie Sie die Elemente verwenden werden.

  • Wenn Sie nach Elementen suchen, verwenden Sie ein Set.
  • Wenn Sie es sequenziell verarbeiten, verwenden Sie eine Liste.
  • Wenn Sie es in gleichgroße Stücke zerhacken (wie beim Sortieren), verwenden Sie einen Vektor.
  • Wenn Sie die Länge zählen müssen, verwenden Sie einen Vektor.
  • Wenn Sie diese von Hand verwenden, um einen Vektor werden eingeben (um ein wenig zu sparen zitiert)

In der Praxis die meisten der Verarbeitung Ich sehe beinhaltet die Daten in eine seq und Verarbeitung drehen, dass so die Unterschiede zwischen Listen- und Vektor sind oft eine Frage des persönlichen Geschmacks.

+3

Sets werden auch gezählt. – amalloy

+1

Listen werden auch gezählt. – kotarak

9

Im Allgemeinen möchten Sie ein Set, wenn Ihre primäre Sorge ist "Ist das Ding in dieser Gruppe?" Abgesehen davon, dass die Reihenfolge nicht beibehalten wird, behalten Sätze auch nur einmal einen bestimmten Wert. Wenn Sie sich also für die genaue Platzierung von Werten interessieren, ist ein Vektor mehr, was Sie wollen. Wenn es Ihnen hauptsächlich darum geht, auf Mitgliedschaft zu testen, ist ein Set besser geeignet.

2

Ja, verwenden Sie einen Satz. Wenn Sie nicht sehr, sehr gute Gründe haben, etwas anderes zu wählen (Leistung, Speicherverbrauch, ...), ist das Set die richtige Wahl.

Denken Sie daran, dass es bei der Programmierung in erster Linie darum geht, mit dem menschlichen Leser Ihres Codes und nicht mit dem Computer zu kommunizieren. Indem Sie ein Set verwenden, machen Sie völlig klar, dass die Reihenfolge der Elemente irrelevant ist (und Sie erwarten keine doppelten Werte), was dem Leser hilft, Ihre Absichten und Ihre eigene mentale Einstellung zu verstehen.