2013-02-02 6 views
16

Sono nuovo di Clojure. Scusa se è una domanda stupida!Clojure list vs. vector vs. set

Devo utilizzare un set anziché un vettore o un elenco ogni volta che non mi interessa l'ordine degli articoli? Quali sono i criteri comuni per decidere tra questi tre quando l'ordine non è necessario?

+1

Grazie ragazzi, tutte ottime risposte ho svalutato ogni risposta. – Blacksad

risposta

19

Dipende davvero da come verranno utilizzati gli articoli.

  • Se si cercano elementi, utilizzare un set.
  • Se lo si elabora in sequenza, utilizzare un elenco.
  • Se lo si taglierà in blocchi di dimensioni uguali (come durante l'ordinamento), utilizzare un vettore.
  • Se è necessario contare la lunghezza, utilizzare un vettore.
  • Se sarete digitando questi a mano utilizzare un vettore (per risparmiare un po 'citando)

In pratica la maggior parte dell'elaborazione vedo coinvolge trasformare i dati in un seq e l'elaborazione che ne faccia le distinzioni tra la lista e il vettore è spesso una questione di gusto personale.

+3

Anche gli insiemi vengono contati. – amalloy

+1

Vengono contate anche le liste. – kotarak

9

In generale, si desidera un set quando la preoccupazione principale è "È questa cosa in questo gruppo?" Oltre a non conservare l'ordine, anche i set mantengono solo un determinato valore una volta. Quindi se ti interessa il preciso posizionamento dei valori, un vettore è più quello che vuoi. Se ti interessa principalmente testare l'iscrizione, un set è più appropriato.

2

Sì, utilizzare un set. A meno che tu non abbia delle ottime ragioni per scegliere qualcos'altro (prestazioni, uso della memoria, ...) l'insieme è la scelta giusta.

Ricordare che la programmazione è principalmente relativa alla comunicazione con il lettore umano del proprio codice e non con il computer. Utilizzando un set si rendono del tutto chiaro che l'ordine degli elementi è irrilevante (e non si aspettano valori duplicati) aiutare il lettore a capire le vostre intenzioni e il proprio set mentale mente.