在 Haskell 中,如何比较两个列表以检查它们是否相等?顺序也不重要。
例子:
[1,2] = [2,1]
我试过all (flip elem [1,2,3]) [2,1]
了,但这会返回true
......
谢谢。
在 Haskell 中,如何比较两个列表以检查它们是否相等?顺序也不重要。
例子:
[1,2] = [2,1]
我试过all (flip elem [1,2,3]) [2,1]
了,但这会返回true
......
谢谢。
像这样的东西?
import Data.List (sort)
areEqual a b = sort a == sort b
OUTPUT:
*Main> areEqual [1,2] [2,1]
True
作为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]
“没有顺序或重复的收集”的一个很好的数据结构来自模块Data.Set
:
import qualified Data.Set as S
sameElems xs ys = S.fromList xs == S.fromList ys
但是,这确实认为[1,1]
等于[1]
,这可能不是您想要的。