在Haskell中,您如何比较两个列表以检查它们是否相等?订单也无关紧要。
示例:
[1,2] = [2,1]
我尝试了all (flip elem [1,2,3]) [2,1]
,但这会返回true
...
感谢。
答案 0 :(得分:14)
这样的东西?
import Data.List (sort)
areEqual a b = sort a == sort b
OUTPUT:
*Main> areEqual [1,2] [2,1]
True
答案 1 :(得分:8)
作为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 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]
答案 2 :(得分:4)
“无订单或重复收集”的良好数据结构来自模块Data.Set
:
import qualified Data.Set as S
sameElems xs ys = S.fromList xs == S.fromList ys
但是,这会将[1,1]
视为等于[1]
,这可能不是您想要的。