16

在 Haskell 中,如何比较两个列表以检查它们是否相等?顺序也不重要。

例子:

[1,2] = [2,1]

我试过all (flip elem [1,2,3]) [2,1]了,但这会返回true......

谢谢。

4

3 回答 3

14

像这样的东西?

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

OUTPUT:
*Main> areEqual [1,2] [2,1]
True
于 2013-03-10T05:15:06.580 回答
9

作为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,因此请查找Multiset 包

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] 
于 2013-03-18T15:03:54.663 回答
4

“没有顺序或重复的收集”的一个很好的数据结构来自模块Data.Set

import qualified Data.Set as S

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

但是,这确实认为[1,1]等于[1],这可能不是您想要的。

于 2013-03-10T12:20:40.350 回答