4

初歩的な質問 -- 通常、マルチマップとして何を使用しますか? ラベル付け関数を取り、各ラベルで要素を分割する関数が必要です。例えば、

f x | x `mod` 2 == 0 = EVEN
    | otherwise = ODD

partition f lstwhereの出力lst :: [Int]

EVEN --> [list of even numbers]
ODD --> [sublist of odd numbers]

お手数をおかけして申し訳ありませんが、Hoogle で同様のものを見つけることができませんでした。Data.List.Keygroup関数、 、およびいくつかのマッピングを介してそこに到達できると思いますsortが、もっと簡単な方法があるはずですよね? これは一般的に便利な機能のようです。

4

1 に答える 1

7

ケースが 2 つしかない場合は、それらをブール値にマップして を使用できますData.List.partition

Prelude Data.List> partition odd [1, 23, 42, 7, 1337, 8]
([1,23,7,1337],[42,8])

一般的なケースではData.Map、リストで a を使用するか、値の型として set を使用できます。を使用して簡単に作成できますData.Map.fromListWith

Prelude Data.Map> let partition f xs = fromListWith (++) [(f x, [x]) | x <- xs]
Prelude Data.Map> partition (`mod` 3) [1, 23, 42, 7, 1337, 8]
fromList [(0,[42]),(1,[7,1]),(2,[8,1337,23])]
于 2011-07-25T01:03:10.443 に答える