take x $ sortBy (compare `on` fst) [("asd", 1), ...]
take x
क्रमबद्ध सूची से पहले एक्स आइटम लेता है। sortBy
पहली तर्क के रूप में दिए गए सॉर्टिंग फ़ंक्शन का उपयोग करके दूसरे तर्क के रूप में दी गई सूची को टाइप करता है। (compare `on` fst)
प्रत्येक ट्यूपल के पहले मानों की तुलना करता है। ध्यान दें कि यह उदाहरण सॉर्टिंग के लिए प्रत्येक टुपल के पहले मान की तुलना करता है। दूसरे मान से सॉर्ट करने के लिए, fst
को snd
से बदलें।
आप देखते हैं कि sortBy
फ़ंक्शन बहुत सामान्य है, क्योंकि यह आपको मानों की तुलना करने के लिए उपयोग किए गए फ़ंक्शन को परिभाषित करने देता है। समारोह में दो तर्क होते हैं और उन्हें एलटी, ईक्यू या जीटी में से एक लौटा देना चाहिए। ध्यान दें कि फ़ंक्शन compare
दोनों तर्कों को Ord
से प्राप्त करने की आवश्यकता है। सहायक on
मॉड्यूल Data.Function
में पाया जा सकता है। फ़ंक्शन sortBy
मॉड्यूल Data.List
में है।
संपादित करें: यहां एक पूर्ण कार्य उदाहरण है जो उनके पहले मूल्यों की तुलना करके टुपल्स की एक सूची टाइप करता है और परिणामी सूची के पहले 2 tuples प्रिंट करता है। ध्यान दें कि मैंने ऊपर दिए गए उदाहरण से on
को समकक्ष फ़ंक्शन के साथ प्रतिस्थापित किया है जो दर्शाता है कि on
आंतरिक रूप से क्या करता है।
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
संपादित करें: टॉम Lokhorst के रूप में उसकी टिप्पणी में बताया, मॉड्यूल Data.Ord
से समारोह comparing
अधिक पठनीय प्रतिस्थापन/on compare
के लिए शॉर्टकट है, इसलिए ऊपर भी sortBy (comparing fst)
रूप में लिखा जा सकता है।
मुझे पता है कि आपका प्रश्न शायद आपकी जिज्ञासा के लिए अधिक है, लेकिन आप डेटा के साथ क्या कर रहे हैं? क्या एक क्रमबद्ध सूची वास्तव में आप समाप्त करना चाहते हैं? हम अब सी देश में निम्न-स्तरीय सरणी में तत्वों के चारों ओर घूम रहे नहीं हैं और हैकेल आपको रोचक डेटा प्रकारों के पूरे चिड़ियाघर तक आसानी से पहुंच प्रदान करता है जो शायद "सॉर्ट" के साथ करने के लिए आप जो भी कर रहे हैं, डेटा। – jberryman
कारण यह है कि मैं सीख रहा हूं और जानना चाहता हूं कि संभावनाएं क्या हैं, और सॉर्ट फ़ंक्शन वह है जिसे हर कोई समझता है ताकि स्पष्टीकरण आसान हो। मुझे पता है कि एम्बेडेड प्रकारों के बारे में पता है, अभी भी सीखना, धन्यवाद – gruber