logik2021/codego/core/utils/utils.go

85 lines
1.5 KiB
Go

package utils
import (
"sort"
"strings"
)
/* ---------------------------------------------------------------- *
* EXPORTS
* ---------------------------------------------------------------- */
func StrListContains(list []string, x string) bool {
for _, obj := range list {
if obj == x {
return true
}
}
return false
}
func Min2(x int, y int) int {
if x <= y {
return x
}
return y
}
func Max2(x int, y int) int {
if x >= y {
return x
}
return y
}
func SortStrings(list *[]string) {
sort.Slice(*list, func(i int, j int) bool {
u := strings.ToLower((*list)[i])
v := strings.ToLower((*list)[j])
cmp := strings.Compare(u, v)
return (cmp < 0)
})
}
func FilterStrings(list *[]string, f func(string) bool) []string {
var listFiltered = []string{}
for _, val := range *list {
if f(val) {
listFiltered = append(listFiltered, val)
}
}
return listFiltered
}
func UnionStrings2(list1 []string, list2 []string) []string {
var mark = make(map[string]bool)
for _, item := range list1 {
mark[item] = true
}
for _, item := range list2 {
mark[item] = true
}
var list = make([]string, len(mark))
var i int = 0
for item, _ := range mark {
list[i] = item
i++
}
return list
}
func UnionStringsTo(listTo *[]string, listFrom []string) {
var mark = make(map[string]bool)
for _, item := range listFrom {
mark[item] = true
}
for _, item := range *listTo {
mark[item] = false // signals suppression of duplicate addition
}
for item, isNew := range mark {
if isNew {
*listTo = append(*listTo, item)
}
}
}