Haskell では、2 つのリストを比較して等しいかどうかを確認するにはどうすればよいですか? また、順序は重要ではありません。
例:
[1,2] = [2,1]
私は試しall (flip elem [1,2,3]) [2,1]
ましたが、これは戻りますtrue
...
ありがとう。
Haskell では、2 つのリストを比較して等しいかどうかを確認するにはどうすればよいですか? また、順序は重要ではありません。
例:
[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]
、これは望ましくない場合があります。