github.com/kazu/loncha@v0.6.3/map.go (about)

     1  package loncha
     2  
     3  func Keys[K comparable, V any](m map[K]V) (keys []K) {
     4  
     5  	if m == nil {
     6  		return nil
     7  	}
     8  
     9  	keys = make([]K, 0, len(m))
    10  	for k, _ := range m {
    11  		keys = append(keys, k)
    12  	}
    13  	return
    14  }
    15  
    16  func Values[K comparable, V any](m map[K]V) (values []V) {
    17  
    18  	if m == nil {
    19  		return nil
    20  	}
    21  
    22  	values = make([]V, 0, len(m))
    23  	for _, v := range m {
    24  		values = append(values, v)
    25  	}
    26  	return
    27  }
    28  
    29  // SelectMap ... rewrite map each key, value pair.
    30  func SelectMap[K comparable, V any](m map[K]V, fn func(k K, v V) (K, V, bool)) (result map[K]V) {
    31  	result = make(map[K]V)
    32  	for k, v := range m {
    33  
    34  		nk, nv, remove := fn(k, v)
    35  		if remove {
    36  			continue
    37  		}
    38  		result[nk] = nv
    39  	}
    40  	return
    41  }