haskell Sortieren
Wie kann es getan werden, in der die meisten einfach Weg zu schreiben (oder vielleicht gibt es etwas, eingebettet in haskell) - Funktion, die takse als Argumente eine Liste von Tupeln (String, Int) und Int x und return top x Tupel als Liste nach x-Wert.
Frage ich mich, ob es möglich, um eine Funktion schreiben, die dauert auch 3-argument ist der name (oder index) abgelegt Tupel nach der die Sortierung durchgeführt werden muss.
Was sind die besten Lösungen, um es ziemlich generisch?
- Ich weiß, Ihre Frage ist wohl mehr für Ihre eigene Neugier, aber was machst du mit den Daten? Ist eine sortierte Liste wirklich, was Sie wollen, um am Ende mit? Wir sind nicht schlurfenden um die Elemente im low-level arrays in C Land mehr und haskell gibt Ihnen einfachen Zugriff auf einen ganzen zoo von interessanten Daten-Typen, die wahrscheinlich besser geeignet für zu tun, was Sie tun werden mit dem "sortierte" Daten.
- Der Grund dafür ist, dass Im Lern-und wollen Sie wissen, was sind die Möglichkeiten und die Art-Funktion ist die eine, die alle verstehen, so dass die explenation einfacher ist. Natürlich weiß ich über die integrierten Typen, noch lernen, danke
Du musst angemeldet sein, um einen Kommentar abzugeben.
take x
nimmt die ersten x Elemente aus der sortierten Liste.sortBy
sortiert die Liste als zweites argument mit der Sortier-Funktion als erstes argument.(compare `on` fst)
vergleicht die ersten Werte der einzelnen Tupel.Beachten Sie, dass dieses Beispiel wird der erste Wert jedes Tupel für die Sortierung. Sortieren durch den zweiten Wert ersetzt
fst
mitsnd
.Sehen Sie, dass die
sortBy
Funktion ist sehr allgemein, da es ermöglicht das definieren der Funktion zum vergleichen der Werte. Die Funktion nimmt zwei Argumente und sollte die Rückkehr einer LT, EQ, GT. Beachten Sie, dass die Funktioncompare
erfordert sowohl Argumente, die zur Ableitung vonOrd
. Die Hilfsfunktionon
finden Sie im ModulData.Function
. Die FunktionsortBy
ist in das ModulData.List
.BEARBEITEN:
Hier ist ein vollständiges Beispiel arbeiten, die sortiert eine Liste von Tupeln, die durch den Vergleich mit den ersten Werten und druckt die erste 2-Tupel der resultierenden Liste. Beachten Sie, dass ersetzte ich die
on
aus dem Beispiel oben durch eine äquivalente Funktion, die zeigt, wason
hat intern.BEARBEITEN:
Als Tom Lokhorst erläuterte in seinem Kommentar, die Funktion
comparing
aus dem ModulData.Ord
ist ein lesbarer Ersatz/shortcut füron compare
, so dass die oben genannten könnte auch geschrieben werden alssortBy (comparing fst)
.comparing
Funktion vonData.Ord
ist das gleiche wieon compare
. Man könnte also auch schreibensortBy (comparing fst) list
.take
bevor SiesortBy
? mySort kann möglicherweise nehmen Sie eine unendliche Liste.base-4.8.0.0
,Data.List
bietetsortOn
(in diesem Fall:sortOn fst
). @AndreArtus, wenn Sie nehmen die erste, Sie sind nur immer die ersten x, das Obere x entsprechend zu Sortieren. Sortieren eine unendliche Liste nicht wirklich sinnvoll irgendwie!