zoukankan      html  css  js  c++  java
  • Go遍历struct,map,slice

    原文链接:http://www.zhoubotong.site/post/23.html

    遍历结构体

    如何实现遍历结构体字段? 好吧,言归正传!举个例子:
    demo1:

    package main
    
    import (
       "fmt"
       "reflect"
    )
    
    type Student struct {
       name string
       age  int
    }
    
    func main() {
       v := reflect.ValueOf(Student{"乔峰", 29})
       count := v.NumField()
       for i := 0; i < count; i++ {
          f := v.Field(i) //字段值
          switch f.Kind() {
          case reflect.String:
             fmt.Println(f.String())
          case reflect.Int:
             fmt.Println(f.Int())
          }
       }
    }

    再举给栗子:

    package main
    
    import (
       "fmt"
       "reflect"
    )
    
    type LanType struct {
       s1, s2, s3 string
    }
    
    var language interface{} = LanType{"Php", "Go", "Python3"}
    
    func main() {
       value := reflect.ValueOf(language)
       for i := 0; i < value.NumField(); i++ {
          fmt.Printf("字段索引 %d: %v
    ", i, value.Field(i))
       }
    }

    输出:

    BASIC
    字段索引 0: Php
    字段索引 1: Go
    字段索引 2: Python3

    遍历切片

    使用 for range遍历:

    package main
    
    import (
       "fmt"
    )
    
    func main() {
       language := []string{"Php", "Go", "Python3"}
       for k, val := range language {
          fmt.Printf("切片索引 %d is :%s
    ", k, val)
       }
    }

    输出:

    BASIC
    切片索引 0 is :Php
    切片索引 1 is :Go
    切片索引 2 is :Python3

    遍历Map

    package main
    
    import (
       "fmt"
    )
    
    func main() {
       language := make(map[string]string)
       language["1"] = "Php"
       language["2"] = "Go"
       language["3"] = "Python3"
       language["4"] = "C#"
    
       for key, val := range language {
          fmt.Printf("%v=>%v
    ", key, val)
       }
    }

    输出:这里就不贴了,结果会随机输出,因为map遍历出来结果是无序的,顺序不好控制,也不利于业务逻辑;当业务依赖key次序时,那么我们就需要引入“sort”包来解决随机化问题:
    比如这样:

    package main
    
    import (
       "fmt"
       "sort"
    )
    
    func main() {
       language := make(map[string]string)
       language["1"] = "Php"
       language["2"] = "Go"
       language["3"] = "Python3"
       language["4"] = "C#"
    
       sorted_keys := make([]string, 0)
       for k, _ := range language {
          sorted_keys = append(sorted_keys, k) // 提取键名
       }
       sort.Strings(sorted_keys) //
    
       for _, k := range sorted_keys {
          fmt.Printf("%v=>%v
    ", k, language[k])
       }
    }

    输出:

    BASIC
    1=>Php
    2=>Go
    3=>Python3
    4=>C#

    这样输出的结果运行多次也不会改变顺序。

    无论从事什么行业,只要做好两件事就够了,一个是你的专业、一个是你的人品,专业决定了你的存在,人品决定了你的人脉,剩下的就是坚持,用善良專業和真诚赢取更多的信任。
  • 相关阅读:
    C语言-if语句
    C语言-表达式
    C语言-基础
    Java for LeetCode 187 Repeated DNA Sequences
    Java for LeetCode 179 Largest Number
    Java for LeetCode 174 Dungeon Game
    Java for LeetCode 173 Binary Search Tree Iterator
    Java for LeetCode 172 Factorial Trailing Zeroes
    Java for LeetCode 171 Excel Sheet Column Number
    Java for LeetCode 169 Majority Element
  • 原文地址:https://www.cnblogs.com/phpper/p/14332578.html
Copyright © 2011-2022 走看看