import (
"github.com/cnlesscode/gotool/slice"
)
函数功能 : 将字符串切片进行随机排序
返回格式 : []string
slice1 := []string{"a", "b", "c", "d"}
slice1 = slice.SortRandomlyString(slice1)
fmt.Printf("slice1: %v\n", slice1)
函数功能 : 将整数切片进行随机排序
返回格式 : []int
slice1 := []int{1, 2, 3, 4}
slice1 = slice.SortRandomlyInt(slice1)
fmt.Printf("slice1: %v\n", slice1)
函数功能 : 将任意切面进行随机排序
返回格式 : []int
slice1 := []interface{}{1, "hi", 3, 4}
slice1 = slice.SortRandomly(slice1)
fmt.Printf("slice1: %v\n", slice1)
请参考 SortRandomly 封装自己的切片排序函数( 针对自己的切片类型 )
func SortRandomly(slice []interface{}) []interface{} {
rand.Seed(time.Now().Unix())
rand.Shuffle(len(slice), func(i, j int) { slice[i], slice[j] = slice[j], slice[i] })
return slice
}
函数功能 : 根据指定索引删除切片元素 []int
返回格式 : []int
slice1 := []int{1, 2, 3, 4}
slice1 = slice.RemoveInt(slice1, 2)
fmt.Printf("slice1: %v\n", slice1)
// slice1: [1 2 4]
函数功能 : 根据指定索引删除切片元素 []interface
返回格式 : []interface{}
slice1 := []interface{}{1, "hi", 3, 4}
slice1 = slice.RemoveInterface(slice1, 1)
fmt.Printf("slice1: %v\n", slice1)
// slice1: [1 3 4]
请参考 RemoveInterface 封装自己的切片删除函数( 针对自己的切片类型 )
func RemoveInterface(slice []interface{}, index int) []interface{} {
slice = append(slice[:index], slice[index+1:]...)
return slice
}
函数功能 : 向指定位置添加元素 []int
返回格式 : []int
slice1 := []int{1, 2, 3, 4}
slice1 = slice.AppendInt(slice1, 2, 8)
fmt.Printf("slice1: %v\n", slice1)
// slice1: [1 2 8 3 4]
函数功能 : 向指定位置添加元素 []interface{}
返回格式 : []interface{}
slice1 := []interface{}{1, "a", 3, 4}
slice1 = slice.AppendInterFace(slice1, 2, "test")
fmt.Printf("slice1: %v\n", slice1)
// slice1: [1 a test 3 4]
函数功能 : 查找指定元素 []interface{}
返回格式 : int
slice1 := []interface{}{1, "hi", 3, 4}
idx := slice.Find(slice1, "hi")
fmt.Printf("idx: %v\n", idx)
请参考 AppendInterFace 封装自己的切片元素添加函数( 针对自己的切片类型 )
func AppendInterFace(slice []interface{}, index int, val interface{}) []interface{} {
slice = append(slice, 0)
copy(slice[index+1:], slice[index:])
slice[index] = val
return slice
}
在实际的开发过程中切片类型多种多样,我们提供了整数类型的切片交集、差集算法,请根据自己的类型改进使用 ~
package main
import "fmt"
// 切片差集
func Difference(slice1, slice2 []int) []int {
m := make(map[int]int)
n := make([]int, 0)
inter := Intersect(slice1, slice2)
// 获得交集
for _, v := range inter {
m[v] = 1
}
// 变量第1个切片, 不是交集则为差集
for _, value := range slice1 {
if m[value] == 0 {
n = append(n, value)
}
}
// 变量第2个切片, 不是交集则为差集
for _, v := range slice2 {
if m[v] == 0 {
n = append(n, v)
}
}
return n
}
// 两个切片的交集
func Intersect(slice1, slice2 []int) []int {
m := make(map[int]int)
n := make([]int, 0)
for _, v := range slice1 {
m[v] = 1
}
fmt.Printf("m: %v\n", m)
for _, v := range slice2 {
times, ok := m[v]
if ok && times == 1 {
n = append(n, v)
}
}
return n
}
func main() {
slice1 := []int{1, 2, 3}
slice2 := []int{2, 3, 4}
// 交集
intersect := Intersect(slice1, slice2)
fmt.Printf("intersect: %v\n", intersect)
// 差集
difference := Difference(slice1, slice2)
fmt.Printf("difference: %v\n", difference)
}
函数功能 : 将任意类型切片换为字符串类型切片
返回格式 : []string
package main
import (
"fmt"
"github.com/cnlesscode/gotool/slice"
)
func main() {
a := []interface{}{1, 2, "a", "b"}
aString := slice.ToStringItems(a)
fmt.Printf("aString: %v\n", aString)
}
函数功能 : 将任意切片转换为字符串
返回格式 : string
func main() {
a := []interface{}{1, 2, "a", "b"}
aString := slice.ToString(a, "-")
fmt.Printf("aString: %v\n", aString)
}