Go(3[数组])

2023-01-31 02:01:38 数组

数组:var 变量名[len]type

使用场景:

  • 固定需求的时候,使用数组,不可超出指定长度

  • 长度也是数组类型的一部分

  • 底层内存空间是连续的

  • 用来存储常量

  • 数组是一种特殊的字典.....

  • 数组写入,赋值的方式, 数组[索引]=值

  • 数组是值类型,如果copy成另外一个数组,那修改这个数组,原来的数组并不会改变

数组初始化:

    定义:    var 变量名 [len]type

  • 第一种: 

    • var a[5] int = [5]int{1,2,3,4,5}


  • 第二种:

    • ceshi :=[5]int{1,3,4,5}
  • 第三种

    • var b = [5]int{1,3}
  • 第四种(当不可知长度的时候使用 ...),需要注意的是在切片中也有这种用法,不过含义不一样

    • var c = [...]int{1,3,4,5,10}

 

示例:

var a[5]int

var a[5]string

var a[5]float32

var a[5]bool

访问数组中的元素:

  使用下标访问: a[0]访问第一个元素。长度为5的数组访问如下: a[0], a[1], a[2], a[3], a[4]

数组中的长度:

    var a[10]int

    lengh :=len(a)

示例代码拆分部分:

  1. 数组循环:

    1. 格式化%p,用来打印内存地址

    2. & 符号,取变量地址

    3. 尽量用变量来循环

    4. var a [10]int
      
      for i :=0;i<len(a);i++{
         fmt.Printf("%p\n",&a[i])
      }
    5. length:=len(a) 数组长度


  2. 数组初始化:

    1. 定义数组的时候,默认值都是0

    2. 产生另外一个数组,修改这个数组,并不会对原数组进行修改

    3. func test2()  {
         var a[5]int  = [5]int {1,2,3,4,5}
         var b[5] int
         b = a
         fmt.Printf("%v\n",b)
         b[0] = 200
         fmt.Printf("%v\n",b)
         fmt.Printf("%v\n",a)
      
      }
  3. 数组定义:

    1. 声明数组的时候,需要定义长度和类型!!!

      1. 写法:变量[长度]类型 = [长度]类型[值]

    2. 数组赋值:指定下标来指定元素赋值

    3. %#以go的方式打印

    4. var d [5]string = [5]string{1:"abc",4:"zcq"}
      //%#  以Go的方式打印!!!
      fmt.Printf("%#%v\n",d)
      
      fmt.Printf("%v\n",a,b,c)
  4. 二维数组

    1. var a[8][2]int

    2. func test4()  {
         //二维数组
         var a[4][2]int
         for i:=0;i<4;i++{
            for j:=0;i<2;j++{
               a[i][i] = (i+1) *(j+1)
            }
         }
         for i:=0;i<4;i++{
            for j:=0;i<2;j++{
               fmt.Printf("%d",a[i][j])
            }
            fmt.Println()
         }
      }
  5. 数组赋值:随机数字放入数组

    1. 切记:go是强类型语言,所以类型如果不一样,是编译不过去的

    2. 使用随机数模块,使用time模块

      1. r := rand.New(rand.NewSource(time.Now().Unix())
    3. func test5()  {
         //随机数字放入数组
         r := rand.New(rand.NewSource(time.Now().Unix()))
         var five [100]int
         //数组 通过索引来赋值
         for i:=0;i<len(five);i++{
            //赋值操作
            five[i]=r.Int()
            //取值操作
            fmt.Printf("%d\n",five[i])
         }
         fmt.Printf("%d\n",five)
      }
  6. 数组赋值:随机字符串放入数组

    1. go里面是utf-8编码

    2. Sprintf 格式化并返回格式化后的字符串,可直接赋值!!!

    3. func test6()  {
         
         var a [100]string
      
         var b string = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
      
         for i:=0;i<len(a);i++{
            var str string
            for j:=0;j<len(b);j++{
               index :=rand.Intn(len(b))
               //Sprintf 格式化并返回格式化后的字符串
               str = fmt.Sprintf("%s%c",str,b[index])
            }
            a[i] = str
            fmt.Printf("a[%d]=%s\n",i,a[i])
      
         }
      }



相关文章