Skip to content

Commit bdd5bd7

Browse files
authored
Add groupBy to Array.NonEmpty (#164)
1 parent e56ea3c commit bdd5bd7

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

src/Data/Array/NonEmpty.purs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ module Data.Array.NonEmpty
6565
, dropEnd
6666
, dropWhile
6767
, span
68+
, group
69+
, group'
70+
, groupBy
6871

6972
, nub
7073
, nubBy
@@ -347,6 +350,15 @@ span
347350
-> { init :: Array a, rest :: Array a }
348351
span f = adaptAny $ A.span f
349352

353+
group :: forall a. Eq a => NonEmptyArray a -> NonEmptyArray (NonEmptyArray a)
354+
group = unsafeAdapt $ A.group
355+
356+
group' :: forall a. Ord a => NonEmptyArray a -> NonEmptyArray (NonEmptyArray a)
357+
group' = unsafeAdapt $ A.group'
358+
359+
groupBy :: forall a. (a -> a -> Boolean) -> NonEmptyArray a -> NonEmptyArray (NonEmptyArray a)
360+
groupBy op = unsafeAdapt $ A.groupBy op
361+
350362
nub :: forall a. Ord a => NonEmptyArray a -> NonEmptyArray a
351363
nub = unsafeAdapt A.nub
352364

test/Test/Data/Array/NonEmpty.purs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,18 @@ testNonEmptyArray = do
244244
let oneToSeven = fromArray [1, 2, 3, 4, 5, 6, 7]
245245
testSpan { p: (_ < 4), input: oneToSeven, init_: [1, 2, 3], rest_: [4, 5, 6, 7] }
246246

247+
log "group should group consecutive equal elements into arrays"
248+
assert $ NEA.group (fromArray [1, 2, 2, 3, 3, 3, 1]) == fromArray [NEA.singleton 1, fromArray [2, 2], fromArray [3, 3, 3], NEA.singleton 1]
249+
250+
log "group' should sort then group consecutive equal elements into arrays"
251+
assert $ NEA.group' (fromArray [1, 2, 2, 3, 3, 3, 1]) == fromArray [fromArray [1, 1], fromArray [2, 2], fromArray [3, 3, 3]]
252+
253+
log "groupBy should group consecutive equal elements into arrays based on an equivalence relation"
254+
assert $ NEA.groupBy (\x y -> odd x && odd y) (fromArray [1, 1, 2, 2, 3, 3]) == fromArray [fromArray [1, 1], NEA.singleton 2, NEA.singleton 2, fromArray [3, 3]]
255+
256+
log "groupBy should be stable"
257+
assert $ NEA.groupBy (\_ _ -> true) (fromArray [1, 2, 3]) == fromArray [fromArray [1, 2, 3]]
258+
247259
log "nub should remove duplicate elements from the list, keeping the first occurence"
248260
assert $ NEA.nub (fromArray [1, 2, 2, 3, 4, 1]) == fromArray [1, 2, 3, 4]
249261

0 commit comments

Comments
 (0)