take x $ sortBy (compare `on` fst) [("asd", 1), ...]
take x
sıralı listeden birinci x öğeleri alır. sortBy
, birinci bağımsız değişken olarak verilen sıralama işlevini kullanarak ikinci bağımsız değişken olarak verilen listeyi sıralar. (compare `on` fst)
, her bir tuple'nın ilk değerlerini karşılaştırır. Bu örnekte, sıralama için her bir tuple'ın ilk değerini karşılaştırdığına dikkat edin. İkinci değere göre sıralamak için fst
'u snd
ile değiştirin.
Değerleri karşılaştırmak için kullanılan işlevi tanımlamanıza olanak tanıdığından, sortBy
işlevinin çok genel olduğunu görürsünüz. Fonksiyon iki argüman alır ve LT, EQ veya GT'den birini döndürmelidir. compare
işlevinin, Ord
'dan türetilmesi için her iki argümanın gerektiğini unutmayın. Yardımcı işlev on
, Data.Function
modülünde bulunabilir. sortBy
işlevi, Data.List
modülünde bulunur.
DÜZENLEME: Burada, ilk değerlerini karşılaştırarak ve sonuç listesinin ilk 2 kopyasını yazdırarak, bir tupl listesini sıralayan tam bir çalışma örneği. Yukarıdaki örnekten, on
'un dahili olarak ne yaptığını gösteren eşdeğer bir işlevle değiştirdiğimi unutmayın.
import Data.Function
import Data.List
main = print $ mySort [("foo", 1), ("bar", 2), ("baz", 3), ("quux", 4)] 2
mySort list x = take x $ sortBy (\ x y -> compare (fst x) (fst y)) list
DÜZENLEME: Tom Lokhorst olarak onun yorumunda işaret, modül Data.Ord
gelen fonksiyon comparing
on compare
için daha okunabilir yedek/kısayol, bu yüzden yukarıdaki ayrıca sortBy (comparing fst)
olarak yazılmış olabilir.
Sorunun muhtemelen kendi merakınız için daha fazla olduğunu biliyorum, ancak verilerle ne yapıyorsunuz? Sıralanmış bir liste gerçekten ne yapmak istersin? Artık C ülkesindeki düşük seviyeli dizilerde öğeleri karıştırmıyoruz ve haskell, muhtemelen "sıralanmış" ile yapacağınız her şeyi yapmak için daha uygun olan ilginç veri türlerinin tüm hayvanat bahçesine kolay erişim sağlıyor veri. – jberryman
Bunun sebebi, öğrenmenin ve olasılıkların ne olduğunu bilmek istemesi ve sıralama işlevinin herkesin anlayabilmesi ve bu nedenle de açıklamanın daha kolay olması. Tabii ki gömülü tipler hakkında biliyorum, hala öğreniyorum, teşekkürler – gruber