2012-11-13 9 views
5

Vorrei estrarre gli elementi distinti da un elenco Scala, ma non voglio utilizzare la relazione di uguaglianza naturale. Come posso specificarlo?Chiama distinta su una lista immutabile con una relazione di uguaglianza personalizzata in Scala

Devo riscrivere la funzione o c'è qualche modo (magari usando una definizione implicita che mi manca) per invocare il metodo distinct con una relazione di uguaglianza personalizzata?

+0

possibile duplicato di [Scala: Rimuovere i duplicati nella lista degli oggetti] (http : //stackoverflow.com/questions/3912753/scala-remove-duplicates-in-list-of-objects) –

+0

per quanto riguarda la chiamata a .toSet? – Eduardo

+1

@Eduardo toSet si basa sulla relazione di uguaglianza predefinita –

risposta

8

distinct non prevede un algoritmo di ordinamento - utilizza il metodo di uguale (source).

Un modo per ottenere ciò che si desidera è di creare il proprio ordinamento e passarlo a un SortedSet, che si aspetta un Ordering:

implicit val ord = new Ordering[Int] { 
    def compare(i: Int, j: Int) = /* your implementation here */ 
} 
val sortedList = collection.immutable.SortedSet(list: _*)/*(ord)*/.toList 
+0

@thatha Grazie per la modifica. Penso che sia stato rifiutato perché l'ordinamento non dovrebbe essere aggiunto esplicitamente. Ma il suggerimento di aggiungere ': _ *' è corretto. – sschaef

Problemi correlati