Go中Range遍历Array, Slice

1, range用来遍历  array, slice,还有map

     在array,slice中返回索引值还有数值

     在map中返回键值对

2,

package main
  2 
  3 import (
  4     "fmt"
  5     "sort"        
  6 )
  7 
  8 func main(){
  9     m := map[int]string{1 : "a", 2 : "b", 3 : "c", 4 : "d", 5 : "e"}
 10     s := make([]int, len(m))
 11     i := 0
 12     for k, _ := range m{
 13         s[i] = k
 14         fmt.Println(i, k)
 15         i++
 16     }
 17 
 18     fmt.Println(s)
 19     sort.Ints(s)            //将下面两行注掉,结果就是从小到大排序
 20     fmt.Println(s)
 21 
 22 }

[root@localhost GO]# ./hello
0 3
1 4
2 5
3 1
4 2
[3 4 5 1 2]
[1 2 3 4 5]

[root@localhost GO]# ./hello
0 3                           //这个顺序是随机的,每次运行都不一样
1 4
2 5
3 1
4 2
[3 4 5 1 2]

[1 2 3 4 5]
 

3,range遍历数组是相当于c++中的深拷贝,是复制了一份值,之后的改动和原数组互补干扰

   遍历Slice相当于C++中浅拷贝,

 package main
  2 
  3 import (
  4     "fmt"
  5 )
  6 
  7 func main(){
  8     s := [3]int{1, 2, 3}        //数组, 用range是拷贝了一份值去操作
  9     
 10     for i, v := range s{
 11         if i == 0{
 12             s[1] = 200
 13             s[2] = 300
 14         }
 15         s[i] = v + 100
 16         fmt.Print(s[i], " ")    //101 102 103
 17     }
 18     fmt.Println(s)            //[101, 102, 103]
 19 }
 package main
  2 
  3 import (
  4     "fmt"
  5 )
  6 
  7 func main(){
  8     s := []int{1, 2, 3}        切片是拷贝了指针,还是在操作原数组的值
  9     
 10     for i, v := range s{
 11         if i == 0{
 12             s[1] = 200
 13             s[2] = 300
 14         }
 15         s[i] = v + 100
 16         fmt.Print(s[i], " ")        //101 300 400
 17     }
 18     fmt.Println(s)                   //[101, 300, 400]
 19 }

猜你喜欢

转载自blog.csdn.net/weixin_42720316/article/details/89208526