Quale tipo Scala utilizzare per un elenco di partecipanti alla riunione

1

Voglio memorizzare un numero di partecipanti per una riunione. L'ordine di loro non è importante. L'unica cosa che voglio essere sicura è che potrò aggiungere e rimuovere partecipanti, usare le funzioni di filtro (e simili) e ottenere il loro numero. Inoltre non sono ammessi duplicati. Ho iniziato a utilizzare List per la firma del metodo, ma ora mi chiedo se dovrei accettare un tipo più astratto. Ho visto tipi come Traversable , TraversableLike , Iterable e IterableLike .

Il numero di partecipanti sarà piuttosto basso, solitamente inferiore a 100. Le modifiche verranno apportate occasionalmente. I partecipanti sono immutabili (ma hanno proprietà modificabili ad esempio un elenco di azioni che hanno eseguito per quella riunione).

Quale sarebbe il livello di astrazione appropriato per il mio caso?

    
posta valenterry 09.01.2015 - 09:17
fonte

2 risposte

4

Hai menzionato nei tuoi commenti che i tuoi requisiti includono:

  • A) Devi essere in grado di aggiungere e rimuovere elementi dalla collezione.
  • B) L'ordine degli elementi non è importante.
  • C) Le voci duplicate non sono consentite.

Suggerirei di utilizzare un Set immutabile. Dovrebbe avere aggiunte, rimozioni e ricerche costanti, e automaticamente impedirà l'aggiunta di duplicati. Questo è probabilmente un adattamento migliore di un elenco, che in Scala richiede un tempo lineare di aggiornamento, aggiunta o ricerca, poiché è collegato singolarmente e può essere consultato solo a partire dalla testa.

La sintassi per aggiungere e rimuovere da un set immutabile è abbastanza buona.

val xs = Set(alice, bob)
val xs2 = xs + carl              // Set(alice, bob, carl)
val xs3 = xs2 -- Set(alice, bob) // Set(carl)

Hai anche tutte le operazioni tipiche dell'insieme, come i sindacati, gli incroci, ecc.

Come con qualsiasi altro elemento , se disponi di un insieme di dati sufficientemente ampio che le prestazioni sono davvero importanti, fai un benchmark dei risultati.

Riferimento: caratteristiche delle prestazioni delle collezioni Scala

    
risposta data 09.01.2015 - 15:51
fonte
1

Scala ha molti tipi di raccolta che sono praticamente lì solo per consentire intelligenti ottimizzazioni nell'implementazione (vedi La biblioteca di scala 2.8 è un caso di suicidio più lungo nella storia? ). Quelli che in realtà desideri utilizzare hanno solo [A] e nient'altro, e generalmente non hanno suffissi come "Mi piace".

Se vuoi qualcosa di più astratto di un List , prova un Seq se devi indicizzare con un numero, un Iterable per quando devi creare un iteratore o prendere elementi da destra, e un Traversable se non lo fai.

Tuttavia, in genere dovresti usare un tipo concreto per la memorizzazione "interna", dove dovresti aggiungere e rimuovere elementi. In questi casi, ne selezioni uno basato sulle sue caratteristiche di rendimento , per le quali% co_de Probabilmente il% probabilmente va bene nel tuo caso. I tipi più astratti sono più per accettare una raccolta da un altro codice.

    
risposta data 09.01.2015 - 15:25
fonte

Leggi altre domande sui tag