Haskell拆分元组数组,其中第一个元素是相同的

Ada*_* R. 0 haskell split tuples list

我有一个类似于Haskell的列表

[([], "str1"), ([], "str2"), ([1], "ser1")]
Run Code Online (Sandbox Code Playgroud)

我想将它拆分为单独的2元组列表,其中每个元组的第一个元素是相同的,就像这样

[([], "str1"), ([], "str2")]
[([1], "ser1")]
Run Code Online (Sandbox Code Playgroud)

我一直在关注它Data.List.SplitsplitWhen功能,但我一直无法ghc接受它的谓词,因为我收集它实际上并不意味着这样做.

DNA*_*DNA 5

我想你可以使用groupBy:

> import Data.List
> import Data.Function

> let xs = [([], "str1"), ([], "str2"), ([1], "ser1")]

> groupBy ((==) `on` fst) xs

[[([],"str1"),([],"str2")], [([1],"ser1")]]
Run Code Online (Sandbox Code Playgroud)

  • `groupBy(\ xy - > fst x == fst y)`可以在导入[`Data.Function.on`]之后用``groupBy((==)`on`fst)``替换(https:// hackage.haskell.org/package/base-4.8.0.0/docs/Data-Function.html#v:on). (2认同)
  • 注意谓词可以用Data.Function写在`(==)\`on \`fst`上.上. (2认同)