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) }