From 3c61cd9e8217ce5648084aabac84a187accfdf26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=B6=9B?= Date: Mon, 15 Aug 2022 09:23:19 +0800 Subject: [PATCH] =?UTF-8?q?feat(utils):=E5=A2=9E=E5=8A=A0=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=E5=B8=B8=E7=94=A8=E7=9A=84=E5=87=BD=E6=95=B0=E5=BC=8F?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/functional.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 utils/functional.go diff --git a/utils/functional.go b/utils/functional.go new file mode 100644 index 0000000..c8f69fd --- /dev/null +++ b/utils/functional.go @@ -0,0 +1,27 @@ +package utils + +func Map[S, T any](source []S, f func(S) T) []T { + dest := make([]T, len(source)) + for i, elem := range source { + dest[i] = f(elem) + } + return dest +} + +func Reduce[S, T any](source []S, initialValue T, f func(T, S) T) T { + acc := initialValue + for _, elem := range source { + acc = f(acc, elem) + } + return acc +} + +func Filter[T any](source []T, f func(T) bool) []T { + var dest []T + for _, elem := range source { + if f(elem) { + dest = append(dest, elem) + } + } + return dest +}