From 500fc47618014b17166ef928767f12c00257b080 Mon Sep 17 00:00:00 2001 From: Aya Morisawa Date: Fri, 9 Nov 2018 13:03:46 +0900 Subject: Add group function (#3175) --- src/prelude/array.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/prelude/array.ts') diff --git a/src/prelude/array.ts b/src/prelude/array.ts index 42f05dc0c9..8536e486d6 100644 --- a/src/prelude/array.ts +++ b/src/prelude/array.ts @@ -29,3 +29,19 @@ export function unique(xs: T[]): T[] { export function sum(xs: number[]): number { return xs.reduce((a, b) => a + b, 0); } + +export function groupBy(f: (x: T, y: T) => boolean, xs: T[]): T[][] { + const groups = [] as T[][]; + for (const x of xs) { + if (groups.length !== 0 && f(groups[groups.length - 1][0], x)) { + groups[groups.length - 1].push(x); + } else { + groups.push([x]); + } + } + return groups; +} + +export function groupOn(f: (x: T) => S, xs: T[]): T[][] { + return groupBy((a, b) => f(a) === f(b), xs); +} -- cgit v1.2.3-freya