Scala - Suche nach einem bestimmten Tupel in einer Liste

Ich bin schlug meinen Kopf an die Wand, über diese ein. (zur info, ich bin nicht eine scala pro noch nicht, aber ich Liebe es big time)

Sagen wir, wir haben diese Liste von Tupeln:

val data = List(('a', List(1, 0)), ('b', List(1, 1)), ('c', List(0)))

Der Liste hat diese Signatur:

List[(Char, List[Int])]

Meine Aufgabe ist es, um die "List[Int] - element aus einem Tupel innerhalb von "Daten", deren Schlüssel ist, lassen Sie uns zum Beispiel sagen, der Buchstabe "b".

In anderen Worten, wenn ich implementieren Sie eine Methode wie "findIntList(Daten, 'b')", dann erwarte ich ein Ergebnis-Liste(1, 1)

Nur um das Bild zu vervollständigen, habe ich versucht, die folgenden Ansätze. Das problem ist, dass mit den Ansätzen (ausser Methode 1, die ich beschäftigen ein explizites "return"), ich erhalte entweder eine List[Option] oder List[Any] - Objekt zurück, das weiß ich nicht, wie das extrahieren der "List[Int]" Informationen aus

Ansatz 1:

data.foreach { elem => if (elem._1 == char) return elem._2 }

Ansatz 2:

data.find(x=> x._1 == ch)

Ansatz 3:

for (elem <- data) yield elem match {case (x, y: List[Bit]) => if (x == char) y}

Ansatz 4:

for (x <- data) yield if (x._1 == char) x._2
Wenn Sie eine Option(char, List[Bit]) wie das, was Ihr aus data.find, Sie können Holen Sie sich die aktuellen Tupel mit .get: der Nachteil ist, dass es wird eine exception werfen wenn nichts gefunden wurde. Für was es Wert ist, diese Aufgabe schrieb ich meine eigene Funktion als higher-order-Listen-Funktionen sind erst in Woche 5.
(coursera.org/course/progfun)
Dank Mark! Die .bekommen, ist die Magie hier
Wenn Sie ein element vom Typ Option[T]" Sie können es durch eine Karte/foreach/filter, etc... Das funktioniert wie ein ganz netter Abstraktion über "null"
sollten Sie sich akzeptieren Antworten, die Ihr problem lösen. Klicken Sie einfach auf das Häkchen neben der Option die Antwort. Wenn Sie nicht akzeptieren, Antworten auf zu viele Fragen, die Menschen werden aufhören, Ihre Fragen beantworten.

InformationsquelleAutor mainas | 2013-04-25

Schreibe einen Kommentar