简体   繁体   English

如何比较Haskell中的两个列表?

[英]How to compare two lists in Haskell?

In Haskell, how can you compare two lists to check if they are equal? 在Haskell中,如何比较两个列表以检查它们是否相等? Also the order shouldn't matter. 订单也无关紧要。

Example: 例:

[1,2] = [2,1]

I tried all (flip elem [1,2,3]) [2,1] , but this returns true ... 我尝试了all (flip elem [1,2,3]) [2,1] ,但这返回true ...

Thanks. 谢谢。

Something like this? 像这样的东西?

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

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

As Eq a => Eq [a] ( http://www.haskell.org/ghc/docs/7.4.1/html/libraries/base-4.5.0.0/Data-Eq.html ) Eq a => Eq [a]http://www.haskell.org/ghc/docs/7.4.1/html/libraries/base-4.5.0.0/Data-Eq.html

you DON'T need extra code to compare lists for equality. 您不需要额外的代码来比较列表的相等性。

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

If you want to compare lists as bags, then a bag is a MultiSet , so look for a Multiset package 如果你想将列表作为行李进行比较,那么行李是一个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] 

A good data structure for "collection without order or repetitions" is from the module Data.Set : “无订单或重复收集”的良好数据结构来自Data.Set模块:

import qualified Data.Set as S

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

This does, however, consider [1,1] to be equal to [1] , which may not be what you want. 但是,这确实[1,1]等于[1] ,这可能不是你想要的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM