From 8207c72cd49b08d13e2fd3d432c472830f791628 Mon Sep 17 00:00:00 2001 From: Ulric Qin Date: Mon, 3 Dec 2018 20:30:15 +0800 Subject: [PATCH] add slice --- slice/contains.go | 37 +++++++++++++++++++++++++ slice/merge.go | 22 +++++++++++++++ slice/sum.go | 22 +++++++++++++++ slice/unique.go | 70 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 151 insertions(+) create mode 100644 slice/contains.go create mode 100644 slice/merge.go create mode 100644 slice/sum.go create mode 100644 slice/unique.go diff --git a/slice/contains.go b/slice/contains.go new file mode 100644 index 0000000..085e8a9 --- /dev/null +++ b/slice/contains.go @@ -0,0 +1,37 @@ +package slice + +func Contains(sl []interface{}, v interface{}) bool { + for _, vv := range sl { + if vv == v { + return true + } + } + return false +} + +func ContainsInt(sl []int, v int) bool { + for _, vv := range sl { + if vv == v { + return true + } + } + return false +} + +func ContainsInt64(sl []int64, v int64) bool { + for _, vv := range sl { + if vv == v { + return true + } + } + return false +} + +func ContainsString(sl []string, v string) bool { + for _, vv := range sl { + if vv == v { + return true + } + } + return false +} diff --git a/slice/merge.go b/slice/merge.go new file mode 100644 index 0000000..eee8493 --- /dev/null +++ b/slice/merge.go @@ -0,0 +1,22 @@ +package slice + +// SliceMerge merges interface slices to one slice. +func Merge(slice1, slice2 []interface{}) (c []interface{}) { + c = append(slice1, slice2...) + return +} + +func MergeInt(slice1, slice2 []int) (c []int) { + c = append(slice1, slice2...) + return +} + +func MergeInt64(slice1, slice2 []int64) (c []int64) { + c = append(slice1, slice2...) + return +} + +func MergeString(slice1, slice2 []string) (c []string) { + c = append(slice1, slice2...) + return +} diff --git a/slice/sum.go b/slice/sum.go new file mode 100644 index 0000000..25a99b1 --- /dev/null +++ b/slice/sum.go @@ -0,0 +1,22 @@ +package slice + +func SumInt64(s []int64) (sum int64) { + for _, v := range s { + sum += v + } + return +} + +func SumInt(s []int) (sum int) { + for _, v := range s { + sum += v + } + return +} + +func SumFloat64(s []float64) (sum float64) { + for _, v := range s { + sum += v + } + return +} diff --git a/slice/unique.go b/slice/unique.go new file mode 100644 index 0000000..28a5d33 --- /dev/null +++ b/slice/unique.go @@ -0,0 +1,70 @@ +package slice + +func UniqueInt64(s []int64) []int64 { + size := len(s) + if size == 0 { + return []int64{} + } + + m := make(map[int64]struct{}) + for i := 0; i < size; i++ { + m[s[i]] = struct{}{} + } + + realLen := len(m) + ret := make([]int64, realLen) + + idx := 0 + for key := range m { + ret[idx] = key + idx++ + } + + return ret +} + +func UniqueInt(s []int) []int { + size := len(s) + if size == 0 { + return []int{} + } + + m := make(map[int]struct{}) + for i := 0; i < size; i++ { + m[s[i]] = struct{}{} + } + + realLen := len(m) + ret := make([]int, realLen) + + idx := 0 + for key := range m { + ret[idx] = key + idx++ + } + + return ret +} + +func UniqueString(s []string) []string { + size := len(s) + if size == 0 { + return []string{} + } + + m := make(map[string]struct{}) + for i := 0; i < size; i++ { + m[s[i]] = struct{}{} + } + + realLen := len(m) + ret := make([]string, realLen) + + idx := 0 + for key := range m { + ret[idx] = key + idx++ + } + + return ret +}