zoukankan      html  css  js  c++  java
  • range map

    range
     
     
    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	var str1 string = "oldboy"
    	for k1, v1 := range str1 {
    		fmt.Println(k1, string(v1))
    	}
    
    	//for range 包含中文的字符串,英文字符 key 值按照+1顺序递增,中文字符 key 值按照+3顺序递增
    	var str2 string = "老男孩IT教育,只培养技术精英。"
    	for k2, v2 := range str2 {
    		fmt.Println(k2, string(v2))
    	}
    
    	//for range 数组程序会复制对象,key、value 都是从复制品中取出,想要修改值循环数组的地址
    	arr := [5]int{1, 2, 3, 4, 5}
    	for k, v := range arr {
    		if k == 0 {
    			arr[0], arr[1] = 1000, 1000
    			fmt.Println("修改原数组:", arr)  //[1000 1000 3 4 5]
    		}
    
    		// 使用复制品中取出的 value 修改原数组
    		arr[k] = v + 100   // [101 102 103 104 105]
    	}
    	fmt.Println(arr)
    
    	//多维数组遍历
    	var arr2 [2][3]int = [2][3]int{{1, 2, 3}, {2, 4, 6}}
    
    	for k1, v1 := range arr2 {
    		for k2, v2 := range v1 {
    			fmt.Printf("%d*%d=%d ", k1+1, k2+1, v2)
    		}
    		fmt.Printf("
    ")
    	}
    
    	//数组遍历值拷贝行为会造成性能问题,建议数组遍历使用引用类型slice,或数组指针
    	arr3 := [5]int{1, 2, 3, 4, 5}
    	arrP := &arr3
    	for k, _ := range arrP {
    		if k == 0 {
    			arrP[0], arrP[1] = 1000, 1000
    			fmt.Println("修改原数组:", arr3)
    		}
    
    		arrP[k] += 100
    	}
    	fmt.Println(arr3)
    
    	//将所需数据 copy 到较小的 slice,以便释放底层数组内存
    	arr4 := [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
    	slice := arr4[:]
    	for key, value := range slice {
    		fmt.Printf("key: %v , value : %v
    ", key, value)
    	}
    
    	//map 遍历不能保证迭代返回次序,通常是随机结果,具体和版本实现有关
    	m := map[int]string{
    		1: "oldboy",
    		2: "Linux",
    		3: "Golang",
    		4: "Python",
    		5: "Java",
    		6: "DBA",
    	}
    	for k, v := range m {
    		fmt.Printf("%d => %s 
    ", k, v)
    	}
    
    	//channel 遍历
    	var ch chan int
    	ch = make(chan int, 10)
    
    	for i := 0; i < 10; i++ {
    		ch <- i
    	}
    
    	close(ch)
    	for v := range ch {
    		fmt.Println(v)
    	}
    	//如果没有 close() 因为存入管道10个数字,然后无限取数据,在取出来第10个数据,再次range管道,会dead lock
    }
    

      

    map 集合

    package main
    
    import "fmt"
    
    //可以使用内建函数 make 也可以使用 map 关键字来定义 Map
    /* 声明变量,默认 map 是 nil
    var map_variable map[key_data_type]value_data_type
    使用 make 函数
    map_variable := make(map[key_data_type]value_data_type)
    */
    func main() {
    	var m = map[int]string{  //初始化集合,我喜欢的方式
    		1: "oldboy",
    		2: "Linux",
    		3: "Golang",
    	}
    	/*
    	var m=map[int]string
    	m = make(map[int]string)  这是正规的初始化方法
    	*/
    	m[4]="java"  //新增键值对
    	delete(m,1)  //删除键值对
    	for k,v :=range m{
    		fmt.Println(k,v)
    	}
    	//m := map[int]string{  //快速定义集合
    	//	1: "oldboy",
    	//	2: "Linux",
    	//	3: "Golang",
    	//}
    }
    

      

  • 相关阅读:
    二叉树
    树的存储表示
    Jarvis OJ | WEB
    xctf | pwn进阶
    《C++Primer Plus》 | 处理数据
    xctf---stack2 | gdb&IDA 调试
    IDA | Windows主机与Ubuntu 16.04远程调试
    ROP | 中级
    IDA | 窗口
    epub reading
  • 原文地址:https://www.cnblogs.com/perfey/p/9904267.html
Copyright © 2011-2022 走看看