Verwenden Sie die Suchfunktion für Karten im scala
Ich versuche, einen Schlüssel zu finden, in einer Karte, die einen Wert erhalten. Ich bin mit der "suchen" - Funktion, indem Sie nicht in der Lage, herauszufinden, die richtige Prädikat für Sie:
val colors = Map(1 -> "red", 2 -> "blue")
def keyForValue(map: Map[Int, String], value: String) = {
val bool = map.find{map.foreach{map.values(i) == value}}
bool.key
}
Wie kann ich die Iteration über die Karte und den Schlüssel finden, wenn ich weiß das Wert?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie die gleiche Art von Prädikat als mit einem
List
, aber denken Sie daran, Sie sind Auswertung über(key,value)
Paare, anstatt nur Werte (und immer ein paar zurück, wie gut!).Einfaches Beispiel:
.getOrElse(default)._1
ist für. Es extrahiert den Wert aus derOption
erhalten Sie vonfind
gegeben, ein Standard, und mit_1
Sie das erste element des resultierenden Paares,, die passiert werden die wichtigsten im Fall von Karten.Die Signatur für
find
imMap
istfind(p: ((A, B)) ⇒ Boolean): Option[(A, B)]
. So das Prädikat nimmt eineTuple2
und muss wieder einBoolean
. Hinweis: ich wechseltevalue
zu einemInt
da der Schlüssel incolors
ist auch einInt
.Test:
Können Sie auch
get
:Können Sie immer noch mit der abstrakten Lösung und tauschen Sie die Schlüssel mit Ihren Werten, speichern Sie es in eine neue Karte, und durchsuchen Sie dann die neue Karte:
In der Dritten Zeile vertauscht die Schlüssel mit Ihren Werten, und speichert es in
revMap
. (map map
bedeutet der name der Karte, in diesem Fall die parameter, map, dann wird das Wort Karte, dann{_.swap}
tatsächlich tauschen Sie die Schlüssel mit Ihren Werten.Würde ich vermeiden, übergeben Sie die Karte, um die find-Methode, und eher pass nur die Karte Schlüssel der find-Methode.
Dies vermeidet den Umgang mit einer Option[Int,String] -- stattdessen ist es Option[Int].
Gibt es: