Scala имеет функцию groupBy
в списках, которые принимают функцию для извлечения ключей из элементов списка и возвращает другой список, где элементы являются кортежами, состоящими из ключа и списка элементов, создающих этот ключ. Другими словами, что-то вроде этого:
List(1,2,3,4,5,6,7,8,9).groupBy(_ % 2)
// List((0, List(2,4,6,8)), (1, List(1,3,5,7,9)))
(На самом деле, похоже, что в текущих версиях он предоставляет Map
вместо этого, но это не важно). С# имеет еще более полезную версию, которая позволяет сопоставлять значения в одно и то же время (очень полезно, если, скажем, ваша ключевая функция просто извлекает часть кортежа).
Haskell имеет groupBy
, но несколько отличается - он группирует пробеги в соответствии с некоторой функцией сравнения.
Прежде чем я пойду и напишу его, есть ли эквивалент Scala groupBy
в Haskell? У Hoogle нет ничего для того, что я ожидаю, что подпись будет выглядеть (ниже), но я, возможно, просто ошибся.
Eq b => (a -> b) -> [a] -> [(b,[a])]