Angenommen, ich habe x :: [(n, a)]
, wobei n eine Zahl ist und a ein nicht sortierbarer Gegenstand ist (gehört nicht zur Klasse Ord).
Ich möchte diese Liste nach n sortieren.
Ich kann sort x
nicht ausführen, da a
nicht bestellbar ist. Ich kann a
durch Indizes ersetzen und dann die neue Liste mit !!
zusammensetzen, aber das scheint eine schlechte Lösung zu sein.
Alternativen?
Sie möchten
%Vor% oder etwas Ähnliches.
Sie finden on
im Modul Data.Function
und sortBy
in Data.List
, das Sie importieren müssen.
Wenn Sie eine alternative Funktion haben (z. B. f
nennen), aus der eine Bestellung gebildet werden soll, können Sie die Data.Monoid-Eigenschaften von Ordering:
wird Ihre Funktion für die zweite Komponente des Paares verwenden. Wenn Sie kein zweites Kriterium brauchen oder haben, nach dem Sie Ihre Paare sortieren können, dann ist sortBy (comparing fst)
genau richtig (die resultierende Liste enthält nur Paare mit derselben ersten Komponente in der Listenreihenfolge).