From c35bda6a653cc6aa442ebcbca2cf06e500120e34 Mon Sep 17 00:00:00 2001 From: dudaodong Date: Mon, 6 Feb 2023 11:06:46 +0800 Subject: [PATCH] feat: add ListToMap for list --- datastructure/list/list.go | 11 +++++++++++ datastructure/list/list_test.go | 13 +++++++++++++ 2 files changed, 24 insertions(+) diff --git a/datastructure/list/list.go b/datastructure/list/list.go index cea36e0..f610436 100644 --- a/datastructure/list/list.go +++ b/datastructure/list/list.go @@ -405,3 +405,14 @@ func (l *List[T]) batchRemove(list *List[T], complement bool) bool { func (l *List[T]) Iterator() iterator.Iterator[T] { return iterator.FromSlice(l.data) } + +// ToMap convert a list to a map based on iteratee function. +func ListToMap[T any, K comparable, V any](list *List[T], iteratee func(T) (K, V)) map[K]V { + result := make(map[K]V, list.Size()) + for _, item := range list.data { + k, v := iteratee(item) + result[k] = v + } + + return result +} diff --git a/datastructure/list/list_test.go b/datastructure/list/list_test.go index 67a4319..3a355d4 100644 --- a/datastructure/list/list_test.go +++ b/datastructure/list/list_test.go @@ -447,3 +447,16 @@ func TestIterator(t *testing.T) { assert.Equal([]int{1, 2, 3, 4}, rs) } + +func TestListToMap(t *testing.T) { + assert := internal.NewAssert(t, "ListToMap") + + list := NewList([]int{1, 2, 3, 4}) + + result := ListToMap(list, func(n int) (int, bool) { + return n, n > 1 + }) + expected := map[int]bool{1: false, 2: true, 3: true, 4: true} + + assert.Equal(expected, result) +}