Ich habe eine Liste von Listen, sagen wir:
%Vor% Ich möchte die innere Liste mit den meisten Elementen erhalten, in diesem Fall [1,2,3]
.
Ich versuche, die Funktion maximumBy
aus der Data.List
-Bibliothek zu verwenden:
aber ich bekomme den folgenden Fehler: not in scope 'on'
Kann jemand mir sagen, was falsch ist, oder wenn Sie einen besseren Weg haben, die Liste zu bekommen?
on
ist in Data.Function definiert , also müssen Sie das importieren.
Alternativ können Sie comparing
von verwenden Data.Ord :
Bei der Verwendung von maximumBy
mit comparing length
oder compare 'on' length
wird der Job für kurze Listen problemlos ausgeführt. Beachten Sie, dass dies keine sehr effiziente Lösung ist, wenn die Listen lang sind, da der Algorithmus jedes Mal zwei Listen vergleicht. es wird ihre Längen neu berechnen.
Wenn wir zum Beispiel eine sehr lange erste Liste gefolgt von vielen kurzen Listen haben, wird die Verwendung von maximumBy
sehr langsam sein, da die Länge der ersten Liste bei jedem Schritt neu berechnet wird.
Wir können eine effizientere Lösung finden, indem wir die Längen der Listen zwischenspeichern:
%Vor%Natürlich macht das keinen großen Unterschied, wenn Ihre Listen klein sind, aber es lohnt sich, es zu beachten.