85 lines
1.5 KiB
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)
|
|
}
|
|
}
|
|
}
|