2013-03-10 2 views
14

하스켈 (Haskell)에서 두리스트를 비교하여 어떻게 동일하다는 것을 확인할 수 있습니까? 또한 명령은 중요하지 않아야합니다.하스 켈에서 두 목록을 비교하는 방법은 무엇입니까?

예 :

[1,2] = [2,1]

내가 all (flip elem [1,2,3]) [2,1]을 시도했지만이 true 반환 ...

감사합니다.

+1

를 찾아/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 효율성에 관심이 있다면 아마 이런 방식으로 목록을 사용해서는 안됩니다. 'Data.Set' 어쩌면? – Pubby

4

위한 좋은 데이터 구조 "모음 순서 또는 반복하지 않고는"모듈 Data.Set에서입니다 :

import qualified Data.Set as S 

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

이것은, 그러나, [1]에 동일하게 [1,1]을 고려 않습니다하지 않을 수 있습니다 무엇을 네가 원해.

+0

Data.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, 그래서이 링크 http://stackoverflow.com/questions을 확인하셨습니까 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

왜 PackageImports를 사용하고 있습니까? 더 중요한 것은 왜 그것을 언급하지 않고 그렇게하고 있습니까? –

관련 문제