aboutsummaryrefslogtreecommitdiff
path: root/map.go
diff options
context:
space:
mode:
authorAlexander Kiryukhin <a.kiryukhin@mail.ru>2022-04-07 21:36:40 +0300
committerAlexander Kiryukhin <a.kiryukhin@mail.ru>2022-04-07 21:36:40 +0300
commit9cd6b0fca87679e570fbdd4942e3068feb3439fa (patch)
tree557bf877d71854480f4171e9dd324cebb5606056 /map.go
initial
Diffstat (limited to 'map.go')
-rw-r--r--map.go27
1 files changed, 27 insertions, 0 deletions
diff --git a/map.go b/map.go
new file mode 100644
index 0000000..065a6a6
--- /dev/null
+++ b/map.go
@@ -0,0 +1,27 @@
+package collection
+
+import "sync"
+
+func MapSync[T any, R any](collection []T, cb func(item T, idx int) R) []R {
+ result := make([]R, len(collection))
+ for i, v := range collection {
+ result[i] = cb(v, i)
+ }
+ return result
+}
+
+func Map[T any, R any](collection []T, cb func(item T, idx int) R) []R {
+ result := make([]R, len(collection))
+ wg := sync.WaitGroup{}
+ wg.Add(len(collection))
+ for i, v := range collection {
+ func(v T, i int) {
+ go func() {
+ defer wg.Done()
+ result[i] = cb(v, i)
+ }()
+ }(v, i)
+ }
+ wg.Wait()
+ return result
+}