按第一个元素对元组列表进行分组

Ora*_*cle 6 grouping haskell tuples list

假设我有一个包含的元组列表 [("ab", 1), ("ab", 2), ("ac", 3)]

使用该group函数会将此列表拆分为元组列表列表,如下所示:

[
  [("ab", 1)],
  [("ab", 2)],
  [("ac", 3)]
]
Run Code Online (Sandbox Code Playgroud)

如何将元组分组,忽略其中一个索引,以便根据其中一个元素对它们进行分组:

[
  [("ab", 1), ("ab", 2)],
  [("ac", 3]
]
Run Code Online (Sandbox Code Playgroud)

groupBy在这种情况下是否需要该功能?

yǝs*_*ǝla 9

使用Data.List groupBy功能(docs):

Prelude> import Data.List
Prelude Data.List> let xs = [("ab", 1), ("ab", 2), ("ac", 3)]
Prelude Data.List> groupBy (\a b -> fst a == fst b) xs
[[("ab",1),("ab",2)],[("ac",3)]]
Run Code Online (Sandbox Code Playgroud)

或者按照@dfeuer的建议:

...
import Data.Function
groupBy ((==) `on` fst) xs
Run Code Online (Sandbox Code Playgroud)

  • ``groupBy((==)`on`fst)`` (4认同)