zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    angular 中同级元素交替样式
    Type反射遍历类的属性
    对路径“xxxxx”的访问被拒绝。
    判断文件路径和文件是否存在
    List集合删除方法
    .NET 树型递归
    AngularJS使用ngMessages进行表单验证
    Windows 端口占用查询
    小程序页面高度控制
    如何理解多个域名解析到同一个服务器空间上?
  • 原文地址:https://www.cnblogs.com/xuweiqiang/p/12192667.html
Copyright © 2011-2022 走看看