16

Haskell では、2 つのリストを比較して等しいかどうかを確認するにはどうすればよいですか? また、順序は重要ではありません。

例:

[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 に答える