6

के साथ एक बार एक दूसरे के साथ डेटा सेट की तुलनात्मक रूप से तुलना करना मानसिक झगड़ा के एक वर्ष से अधिक के बाद, मैं आखिरकार हास्केल को समझता हूं कि यह मेरी सामान्य प्रोग्रामिंग आवश्यकताओं के लिए मेरी प्राथमिक भाषा पर विचार करने के लिए पर्याप्त है। मैं बिल्कुल इसे प्यार करता हूँ।हस्केल

लेकिन मैं अभी भी एक कार्यात्मक तरीके से बहुत विशिष्ट संचालन करने के साथ संघर्ष करता हूं।

एक सरल उदाहरण:

Set = [("Bob", 10), ("Megan", 7), ("Frank", 2), ("Jane", 11)] 

मैं एक दूसरे के लिए इन प्रविष्टियों की तुलना करना चाहते। सी या पायथन जैसी भाषा के साथ, मैं शायद कुछ जटिल पाश बनाउंगा, लेकिन मुझे यकीन नहीं है कि कौन सा दृष्टिकोण (नक्शा, गुना, सूची समझ?) एक कार्यात्मक भाषा के साथ सबसे अच्छा या सबसे कुशल होगा।

यहाँ कोड का एक नमूना मैं पर काम शुरू कर दिया गया है:

run xs = [ someAlgorithm (snd x) (snd y) | x <- xs, y <- xs, x /= y ] 

विधेय खुद के साथ प्रविष्टियों की तुलना से सूची समझ रखती है, बल्कि समारोह बहुत कुशल है, क्योंकि यह प्रविष्टियों कि पहले से ही किया गया है तुलना नहीं है की तुलना में। उदाहरण के लिए। यह बॉब के साथ मेगन की तुलना करेगा, और फिर बॉब के साथ मेगन की तुलना करें।

इस मुद्दे को हल करने के तरीके पर कोई सलाह बहुत सराहना की जाएगी।

+0

आप कहते हैं कि आप उनकी तुलना करना चाहते हैं, लेकिन तुलना के परिणाम के साथ आप क्या करना चाहते हैं। आपके नमूने से ऐसा लगता है कि आप सूची से दो अलग-अलग तत्वों की हर पसंद को देखना चाहते हैं। क्या यही है? –

+0

हां, लेकिन "रिवर्स" पसंद नहीं है। मैं बॉब के साथ मेगन, फ्रैंक के साथ बॉब, जेन के साथ बॉब और फिर मेगन के साथ मेगन के साथ मेगन और जेन के साथ मेगन की तुलना करना चाहता हूं (मुझे लगता है कि सभी संयोजनों को शामिल किया गया है)। ऐसा कुछ ऐसा लगता है जो गुना के साथ किया जा सकता है, लेकिन मुझे यकीन नहीं है। –

उत्तर

8

यदि आपके पास अपने डेटा प्रकार पर ऑर्डरिंग है, तो आप x /= y के बजाय x < y का उपयोग कर सकते हैं।

[ ... | (x:ys) <- tails xs, y <- ys] 

यह तभी उठा y आइटम कि मूल सूची में x के बाद हो का प्रभाव शामिल है:

एक और दृष्टिकोण एक ही स्थिति में तत्वों की तुलना से बचने के लिए tails का उपयोग करें। यदि आपकी सूची में डुप्लीकेट हैं, तो आप इसे पहले से स्पष्ट फ़िल्टरिंग के साथ जोड़ना चाहेंगे।

+0

ओपी ऑर्डर को अनदेखा करते हुए सभी जोड़ों को देखना चाहता है, इसलिए मुझे नहीं लगता कि सॉर्टिंग मदद करता है - यह एक आवश्यक एन ** 2 समस्या की तरह लगता है। पूंछ के सुझाव के लिए +1 हालांकि, जो मुझे लगता है कि सही जवाब है। –

+0

@JameySharp: हाँ, मेरे पास उस पर एक मस्तिष्क गड़बड़ी थी। उस भाग को पहले ही हटा दिया गया है :) – hammar

+0

इस तरह का एक संक्षिप्त समाधान! अपना समय देने और मदद करने के लिए आपका बहुत बहुत धन्यवाद। –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^