2013-03-10 17 views
14

हास्केल में, आप दो सूचियों की तुलना कैसे कर सकते हैं यह जांचने के लिए कि वे बराबर हैं या नहीं? इसके अलावा आदेश कोई फर्क नहीं पड़ता।हास्केल में दो सूचियों की तुलना कैसे करें?

उदाहरण:

[1,2] = [2,1]

मैं all (flip elem [1,2,3]) [2,1] कोशिश की, लेकिन इस true रिटर्न ...

धन्यवाद।

+1

के लिए देखो आप इस लिंक http://stackoverflow.com/questions जाँच किया/6121256/कुशलतापूर्वक जांच-सब-तत्व-का-एक-बड़े-सूची-समान हैं – dreamcrash

+1

यदि आदेश कोई फर्क नहीं पड़ता है तो आप उन्हें बैग के रूप में देखते हैं, जो मल्टीसेट हैं। एक पैकेज है जो नौकरी करता है, नीचे समझाया गया है। –

उत्तर

13

ऐसा कुछ?

import Data.List (sort) 
areEqual a b = sort a == sort b 

OUTPUT: 
*Main> areEqual [1,2] [2,1] 
True 
+0

क्या यह सबसे कुशल तरीका है? – omega

+0

@omega मुझे कोई जानकारी नहीं है। आप किस प्रकार और कितनी बड़ी सूची की तुलना कर रहे हैं? –

+10

@omega यदि आप दक्षता की परवाह करते हैं तो शायद आपको इस तरह से सूचियों का उपयोग नहीं करना चाहिए। 'डेटा.Set' शायद? – Pubby

4

"आदेश या repetitions के बिना संग्रह" के लिए एक अच्छा डेटा संरचना मॉड्यूल Data.Set से है:

import qualified Data.Set as S 

sameElems xs ys = S.fromList xs == S.fromList ys 

यह है, लेकिन, [1] के बराबर होना करने के लिए विचार [1,1], जो नहीं हो सकता है क्या तुम्हें चाहिए।

+0

डेटा.Set की आंतरिक संपत्ति के उपयोग का अच्छा उदाहरण। मैंने पढ़ा है कि यह इस डेटा कंटेनर का उपयोग करके किया जा सकता है, लेकिन अब मुझे कोई एन्कोड करने का कोई संकेत नहीं है, अब मैं देखता हूं। धन्यवाद। – zurgl

7

Eq a => Eq [a] (http://www.haskell.org/ghc/docs/7.4.1/html/libraries/base-4.5.0.0/Data-Eq.html) के रूप में

आप समानता के लिए सूचियों की तुलना करने के लिए अतिरिक्त कोड की जरूरत नहीं है।

[1,2] == [2,1] 

आप बैग के रूप में सूचियों की तुलना करना चाहते हैं, तो एक बैग एक मल्टीसेट है, तो एक Multiset package

import "multiset" Data.MultiSet as M 

-- or 

import "multiset" Data.IntMultiSet as M -- if you deal with Ints 

M.fromList [1,2] == M.fromList [2,1] 
+7

आप पृथ्वी पर क्यों आयात कर रहे हैं पैकेज आयात? इस बिंदु पर और अधिक, आप इसका उल्लेख किए बिना ऐसा क्यों कर रहे हैं? –

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