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

轉載自:https://www.jianshu.com/p/8192f2e807bc


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM