Wie das filtern einer Liste von Tupeln in scala?
Habe ich die folgende Liste in der Scala, das gefiltert werden soll, basierend auf Kriterien, so dass, wenn es gibt alle Tupel mit identischen ersten Wert ,
Wie aus dem folgenden Beispiel möchte ich ausschließen
List((a,1), (a,2))
da ist es mit "a" wie "duplizieren".
- Sie wollen entfernen Sie die beiden Bedingungen ((a,1) und (a,2)) oder nur eine (filter, andere)? Dass man die Liste((a,1), (a,2), (b,1), (b,2)) ergeben würde eine leere Liste ist, richtig?
- Zumindest versuchen, nicht zu machen es so Aussehen, wie die Coursera Progfun Kursarbeit
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dem Sie filtern möchten Ihre
result
mit einer Funktion, die nur verlässt unberührt diese Listen ohne doppelte "Tasten"Diese Filter-Funktion muss eine Liste von Paaren
List[(A,B)]
und true zurückgeben, nur dann, wenn das paar erste element nicht vorhanden ist, die anderswo für alle Elemente und umgesetzt werden können, wieEs Gruppen, die Elemente in einer
Map
dessen Schlüssel dieA
s und deren Werte eine entsprechende Liste derB
s gepaart mit diesem Schlüssel.Aus diesen Werten können Sie akzeptieren nur diejenigen, die eine Größe von nicht mehr als 1
(_._1).values
und_.size
Arbeit? Die Verwendung von_.
wirklich verwirrt mich. Es scheint mir, wie In manchen Kontexten, es hilft zu vermeiden, unter Bezugnahme auf eine offensichtliche Sache wie... wenn ich mich Filterung eine Liste von Menschen, die durch Mindestalter,ich würde sagen, so etwas wiehumans.filter(_.age > 18)
weil diese Liste nur Menschen, und ich denke, es macht es auch mehr polymorphe, im Falle einer Liste zum Beispiel hat andere Dinge, die den Menschen und ich möchte immer noch filter mit den gleichen Kriterien. Vielleicht bin ich falsch oder nicht, aber immer noch l nicht das bekommen, was geht auf in Ihrem Antwort-code._._1
es ist die Kurzform syntax für eine Funktion literal, ein.k.ein. anonyme Funktion. Es bedeutet, dass Sie eine Funktion definieren, die on-the-fly, ohne ihm einen Namen. Im Allgemeinen ist die erweiterte syntax wärex => x._1
und übergeben Sie es an diegroupBy
Methode wie diese:xs.groupBy(x => x._1)
. Die groupBy-Methode erwartet eine Funktion als parameter und füttern wir Sie ein. Da diese Funktion literal verwendet nur einen parameter auf einmal, können wir vermeiden, geben Sie einen Namen mithilfe der_
Platzhalter sox => x._1
entspricht_._1
_
Betreiber, es verwirrt mich in der scala, wenn es in Kombination mit der.
Betreiber (natürlich haskel ist rein funktional im Gegensatz zu scala) habe ich festgestellt, dass post, die Sie gemeinsam (heute früh) bei der recherche zu dieser Frage, ist aber ein wenig zu einfach, zu verstehen, was Los ist hier, glaube ich, was habe ich nicht bekommen, eigentlich war der groupBy-Funktion, aber ich habe das Spiel mit ihm ein wenig und jetzt ist alles ziemlich klar! 🙂_
verwirrt die Menschen überall, vor allem, da in haskell, die Sie brauchen keine Platzhalter zu schreiben pointfree style oder curry-Funktion...Ich glaube, dass der folgende code das tut, was Sie wollen (zu entfernen nur das erste paar, richtig?):
Ich bin mit pattern-matching zu tun, wenn Sie filtern möchten, alles u tun konnte, eine Rekursion über Ihre Liste oder tun, was Kyle vorgeschlagen. Check this out:
Ergebnis:
Distinct werden nur filter die entstandene leere Listen.
Prost!
Ich sah dies als ein herausfiltern von Elementen aus
List[List[Tuple2[Char, Int]]]
wo Sie ein element der Liste hat die gleichen Elemente. In diesem Fall wird ein element der Liste istList[Tuple2[Char, Int]]
was ich will, um wieder eineBoolean
wenn die Elemente gleich sind. DieseList[Tuple2[Char, Int]]
abgebildet werden, um das erste element desTuple
und dann-Logik wird angewandt, um die neue Liste von chars unter Verwendung von distinct und Größe zu überprüfen, ob die Elemente sind die gleichen, und behalten diejenigen, die nur aus einem element.Den filter
Test data:
Testfälle.
basiert auf der @pagoda_5b Lösung, ich denke, wir könnten ein besseres finden.
Was denkst du über:
😉