go常用操作

倒序遍历切片中的元素

package t9

import (
    "fmt"
    "testing"
)

func TestRange(t *testing.T) {

    lst1 := []int{1, 2, 3, 4, 5}

    // 方法1
    for index := range lst1{
        curr := lst1[len(lst1) - (index+1)]
        fmt.Println(curr)
    }
    /*
        5
        4
        3
        2
        1
    */

    fmt.Println("==================================")

    // 方法2
    for i := len(lst1)-1; i >=0; i--{
        curr := lst1[i]
        fmt.Println(curr)
    }
    /*
        5
        4
        3
        2
        1
    */
}

判断字符串是否在切片中

package main

import "fmt"

func main() {
    var accountArr2 = []string{"id", "name", "status", "timezone", "created_at", "updated_at", "organization_id"}
    flag := IsContain2(accountArr2, "whw")
    fmt.Println(flag)
}

// 判断字符串是否在切片中~~
func IsContain2(strList []string, item string) bool {
    for _, str := range strList {
        if str == item {
            return true
        }
    }
    return false
}
判断字符串是否在切片中

给字典排序

package main

import (
    "fmt"
    "sort"
)

func main() {
    // map排序
    map1 := map[string]int{
        "awhw":1,
        "naruto":22,
        "sasuke":33,
    }
    fmt.Println(map1) // map[awhw:1 naruto:22 sasuke:33]

    var keys []string
    for key, _ := range map1{
        keys = append(keys,key)
    }
    // 给key排序
    sort.Strings(keys)
    // 放入另外一个空间
    map2 := make(map[string]int)
    for _, val := range keys{
        map2[val] = map1[val]
    }
    fmt.Println(map2) //map[awhw:1 naruto:22 sasuke:33]
}
给字典排序

整理切片格式(实践经验)

给定一个存放时间字符串的切片:

[2020-01-01 2020-01-02 2020-01-03 2020-01-04 2020-01-05 2020-01-06 2020-01-07 2020-01-08 2020-01-09 2020-01-10 2020-01-11 2020-01-12 2020-01-13 2020-01-14 2020-01-15 2020-01-16 2020-01-17 2020-01-18 2020-01-19 2020-01-20 2020-01-21 2020-01-22 2020-01-23 2020-01-24 2020-01-25 2020-01-26 2020-01-27 2020-01-28 2020-01-29 2020-01-30 2020-01-31 2020-02-01 2020-02-02 2020-02-03 2020-02-04 2020-02-05 2020-02-06 2020-02-07 2020-02-08 2020-02-09 2020-02-10 2020-02-11 2020-02-12 2020-02-13 2020-02-14 2020-02-15 2020-02-16 2020-02-17 2020-02-18 2020-02-19 2020-02-20 2020-02-21 2020-02-22 2020-02-23 2020-02-24 2020-02-25 2020-02-26 2020-02-27 2020-02-28 2020-02-29 2020-03-01 2020-03-02 2020-03-03 2020-03-04 2020-03-05 2020-03-06 2020-03-07 2020-03-08 2020-03-09 2020-03-10 2020-03-11 2020-03-12 2020-03-13 2020-03-14 2020-03-15 2020-03-16 2020-03-17 2020-03-18 2020-03-19 2020-03-20 2020-03-21 2020-03-22 2020-03-23 2020-03-24 2020-03-25 2020-03-26 2020-03-27 2020-03-28 2020-03-29 2020-03-30 2020-03-31 2020-04-01 2020-04-02 2020-04-03 2020-04-04 2020-04-05 2020-04-06 2020-04-07 2020-04-08 2020-04-09 2020-04-10 2020-04-11 2020-04-12 2020-04-13 2020-04-14 2020-04-15 2020-04-16 2020-04-17 2020-04-18 2020-04-19 2020-04-20 2020-04-21 2020-04-22 2020-04-23 2020-04-24 2020-04-25 2020-04-26 2020-04-27 2020-04-28 2020-04-29 2020-04-30 2020-05-01 2020-05-02 2020-05-03 2020-05-04 2020-05-05 2020-05-06 2020-05-07 2020-05-08 2020-05-09 2020-05-10 2020-05-11 2020-05-12 2020-05-13 2020-05-14 2020-05-15 2020-05-16 2020-05-17 2020-05-18 2020-05-19 2020-05-20 2020-05-21 2020-05-22 2020-05-23 2020-05-24 2020-05-25 2020-05-26 2020-05-27 2020-05-28 2020-05-29 2020-05-30 2020-05-31 2020-06-01 2020-06-02 2020-06-03 2020-06-04 2020-06-05 2020-06-06 2020-06-07 2020-06-08 2020-06-09 2020-06-10 2020-06-11 2020-06-12 2020-06-13 2020-06-14 2020-06-15 2020-06-16 2020-06-17 2020-06-18 2020-06-19 2020-06-20 2020-06-21 2020-06-22 2020-06-23 2020-06-24 2020-06-25 2020-06-26 2020-06-27 2020-06-28 2020-06-29 2020-06-30 2020-07-01 2020-07-02 2020-07-03 2020-07-04 2020-07-05 2020-07-06 2020-07-07 2020-07-08 2020-07-09 2020-07-10 2020-07-11 2020-07-12 2020-07-13 2020-07-14 2020-07-15 2020-07-16 2020-07-17 2020-07-18 2020-07-19 2020-07-20 2020-07-21 2020-07-22 2020-07-23 2020-07-24 2020-07-25 2020-07-26 2020-07-27 2020-07-28 2020-07-29 2020-07-30 2020-07-31 2020-08-01 2020-08-02 2020-08-03 2020-08-04 2020-08-05 2020-08-06 2020-08-07 2020-08-08 2020-08-09 2020-08-10 2020-08-11 2020-08-12 2020-08-13 2020-08-14 2020-08-15 2020-08-16 2020-08-17 2020-08-18 2020-08-19 2020-08-20 2020-08-21 2020-08-22 2020-08-23 2020-08-24 2020-08-25 2020-08-26 2020-08-27 2020-08-28 2020-08-29 2020-08-30 2020-08-31 2020-09-01 2020-09-02 2020-09-03 2020-09-04 2020-09-05 2020-09-06 2020-09-07 2020-09-08 2020-09-09 2020-09-10 2020-09-11 2020-09-12 2020-09-13 2020-09-14 2020-09-15 2020-09-16 2020-09-17 2020-09-18 2020-09-19]

把它里面的字符串按照每4个一组整理成切片套切片的格式!

有问题的方法(有问题)

// 根据存时间字符串的切片获取一个按照每4天分组的新切片
func getNewDateSlice(dateSlice []string) [][]string{
    var retSlice [][]string
    length := len(dateSlice)
    //fmt.Println("length>>> ", length) // 263
    //// 可以分多少份
    //allParts := length / 4
    //fmt.Println("allParts>>> ", allParts) // 65
    //// 剩下多少个
    //remainder := length % 4
    //fmt.Println("remainder>>> ", remainder) // 3
    // 分组
    for i := 0; i < length; i+=4 {
        currSLice := dateSlice[i:i+4]
        retSlice = append(retSlice, currSLice)
    }
    return retSlice
}

注意结果会报错!如果 i+4 超过了length的话会上报越界错误!

正确的方法(正确)

出现问题的原因是如果i+4超出了length的话,再使用切片就会使得最后这些值默认转成空字符串。正确的方法需要处理一下边界值,如果i+4大于了length就用边界的length即可:

// 根据存时间字符串的切片获取一个按照每4天分组的新切片
func getNewDateSlice(dateSlice []string) [][]string {
    var retSlice [][]string
    length := len(dateSlice)
    // 分组
    for i := 0; i < length; i += 4 {
        var currSlice []string
        if i+4 > length{
            currSlice = dateSlice[i : length]
        }else{
            currSlice = dateSlice[i : i+4]
        }
        retSlice = append(retSlice, currSlice)
    }
    return retSlice
}

整理切片数据--下一个列表的开头是上一个列表的结尾

输入:

lst1 := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}

输出:

[[1 2 3 4 5 6] [6 7 8 9 10 11] [11 12 13]]

代码:

package t9

import (
    "fmt"
    "testing"
)

// 返回两个int最小的那个
func minInt(a, b int) int {
    if a < b {
        return a
    }
    return b
}

func TestOutRange(t *testing.T) {

    lst1 := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}

    var ret [][]int

    for i := 1; i < len(lst1); i += 5{
        currLst := lst1[i-1 : minInt(i+5, len(lst1))]
        ret = append(ret, currLst)
    }

    fmt.Println("ret>>> ", ret)

}

~~~

posted on 2020-10-28 11:38  江湖乄夜雨  阅读(151)  评论(0编辑  收藏  举报