0
私は要素を等価でグループ化する標準ライブラリ関数を探しています。グループ要素を等価で
例:group
とsort
を構成
f [1,2,3,1,2,3] == [ [1,1], [2,2], [3,3] ]
が仕事をしていません:
Prelude Data.List> group . sort $ [1,2,3,1,2,3]
[[1,1],[2,2],[3,3]]
しかし、単一の関数で上記の作業を行うことができるHaskellのライブラリにあるネイティブ関数があります?
私はData.Listを見ましたが、このような機能は見つかりませんでした。
わかりません。多くのことのためのライブラリ関数はありません。特にこれが単純な場合はそうです。ただし、この実装は、ユースケースによっては必ずしも効率的ではありません。例えば、 'Map Item Int'を使って各項目の数を増やしたほうが良いかもしれません。そして、' group 'の出力を再作成することができます。代わりにそのマップからソートします。 – bheklilr
GHCiでの私の予備テスト(常に最適化されたパフォーマンスを示す最良の指標ではありませんが、今のところそれがあります)では、最後にグループ。 $ xs = '1000000 $ cycle [1..20]'をとり、通常の形式に強制された '$ xs'は2.39秒で、合計で1.483GBのRAMを使用します。' let counter = Map.fromListWith(+ 。フリップジップ(リピート1)。 uncounter = map(uncurry $ flip replicate)です。 Map.toAscList': 'last。最後に未知数。カウンタ$ xsは0.34秒で、合計RAMは369 MBです。そのRAMの多くは 'xs'自身からのものです。 – bheklilr
'HashMap'を使うと、' Data.Map'の 'Map'だけでなく、もっと良いかもしれません。 – Shersh