2017-07-11 6 views
1

Ich habe eine HashMap, die eine Zuordnung alter URIs (Schlüssel) zu ihren Ersatz-URIs (Werten) enthält. Einige der älteren Werte wurden kombiniert, was bedeutet, dass es doppelte Werte gibt. Hier ist ein kleines Beispiel zeigt, was die Daten sieht aus wie (natürlich nicht echte Websites):Der beste Weg, um eine Liste ohne Duplikate zu erstellen?

http://oldaddress1.com -> http://newaddress1.com 
http://oldaddress2.com -> http://newaddress2.com 
http://oldaddress3.com -> http://newaddress2.com 

Ich brauche nur die einzigartigen neuen Adressen aus der Karte auf die effizienteste Art und Weise möglich zu extrahieren, da es eine recht große Datenmenge ist . Aus dem obigen Beispiel würde ich brauche eine Liste zu erzeugen, die die folgenden Werte hat:

list(0) = http://newaddress1.com 
list(1) = http://newaddress2.com 

Mein erster Gedanke ein Arraybuffer ‚s enthält Verfahren wie so zu verwenden, war:

if (!(list contains newAddress)) list += newAddress 

Aber Mir ist aufgefallen, dass es sich dabei möglicherweise um das mehrfache Scannen vieler Daten handelt, es sei denn, die Methode bietet eine effizientere Möglichkeit, nach einem Duplikat zu suchen, als die gesamte Liste zu scannen.

Mir ist auch bewusst, dass ich leicht eine Karte dafür verwenden könnte, aber es wäre einfacher für die Zwecke von dem, was ich versuche, um es in einer Liste zu haben.

Antwort

5

Der effizienteste Weg wäre die Verwendung eines Set[String].

val map = Map("hello" -> "world", "again" -> "world") 
val res: Set[String] = map.values.toSet 

Ausbeuten:

res: Set[String] = Set(world) 

Im Allgemeinen ich die Wikipedia value about set für einen interessanten Lese beziehen würde es Eigenschaften und Anwendungen ist.

+0

Das ist genau das, was ich gesucht habe. Vielen Dank! – hayfreed

Verwandte Themen