go数组取交集截取
golang获取交集没有PHP那样的array的操作函数,只能 for 循环判断
package main import ( "log" "sort" ) func main() { // 声明一个数组, 数组需要指定长度 var arr = [10]string{} // 声明一个切片, 不需要指定长度 var slice = []string{} log.Println(arr) // [ ] log.Println(slice) // [] // 使用make方法创建切片, 初始大小为0, 最大大小为10, 设定一个足够大的最大值, 会使得切片获得更高的性能 var a = make([]string, 0, 10) // 给切片a添加一个对象 a = append(a, "dog") // 给切片添加多个对象 a = append(a, "cat", "fish", "bird", "menkey") // 合并两个切片, {}...是解构数组 a = append(a, []string{"dog2", "cat2", "fish2", "bird2", "menkey2"}...) // 查看切片长度 log.Println(len(a)) // 查看切片的最大长度 log.Println(cap(a)) // 截取切片 a = a[1:6] // 保留a[1], a[2], [3], a[4], a[5] // 切片删除 a[2], a...是解构数组 a = append(a[:2], a[2+1:]...) // 切片插入元素 a[2] = "newA2" var temp = append(a[:2], "newA2") a = append(temp, a[2+1:]...) // 切片升序排序 a = append(a, "apple") sort.Strings(a) log.Println(a) //[apple cat dog2 fish newA2] // 切片降序排序 sort.Sort(sort.Reverse(sort.StringSlice(a))) log.Println(a) //[apple cat dog2 fish newA2] // 切片的拷贝 tempCopy := make([]string, len(a)) copy(tempCopy, a) // 切片的遍历 for i, v := range a { log.Println(i, v) } // 切片的去重 a1 := []string{"dog", "cat", "dog", "dog", "fish", "fish"} a2 := []string{} for _, v1 := range a1 { canAdd := true for _, v2 := range a2 { if v1 == v2 { canAdd = false } } if canAdd { a2 = append(a2, v1) } } log.Println("去重:", a2) //去重: [dog cat fish] // 切片交集 b_one := []string{"dog", "cat", "dog", "dog", "fish", "fish"} b_two := []string{"monkey", "fish", "dog"} b2 := []string{} for _, v1 := range b_one { canAdd := false for _, v2 := range b_two { if v1 == v2 { canAdd = true } } if canAdd { b2 = append(b2, v1) } } log.Println("交集:", b2) //交集: [dog cat fish] // 切片指针 // 切如果动态修改了大小, go会创建一个新的切片, 地址就变化了, 如果要获得一直获得内存地址, 可以使用切片指针 var b []string var p = &b *p = append(*p, "dog") log.Println(*p) *p = append(*p, "cat") log.Println(*p) }
I can see a bigger world.