Golang中数组和切片

package main

import (
	"fmt"
)

func main() {
	// 数组
	var num1 [3]int = [3]int{1, 2, 3}
	fmt.Println(num1)

	var num2 [3]int = [...]int{1, 2, 3}
	fmt.Println(num2)

	// 指定数组下标
	var num3 [3]int = [...]int{2: 1, 0: 2, 1: 3}
	fmt.Println(num3)

	// 遍历数组
	for index, value := range num3 {
		fmt.Printf("index:%v\n", index)
		fmt.Printf("value:%v\n", value)
	}

	// 数组
	var intArray [5]int = [...]int{1, 2, 3, 4, 5}
	// 切片引用intArray数组,从index=1(包含)开始,到index=3(不包含)结束
	slice := intArray[1:3]
	fmt.Println(intArray)                 // [1 2 3 4 5]
	fmt.Println(slice)                    // [2 3]
	fmt.Println("slice元素个数:", len(slice)) // 2
	fmt.Println("slice容量:", cap(slice))   // 4 切片容量可动态变化

	// 使用make创建切片
	var slice1 []int = make([]int, 4, 20)
	fmt.Println(slice1)                     // [0 0 0 0]
	fmt.Println("slice1元素个数:", len(slice1)) // 4
	fmt.Println("slice1容量:", cap(slice1))   // 20 切片容量可动态变化

	// 定义切片直接指定数组,类似make
	var slice2 []int = []int{5, 4, 20}
	fmt.Println(slice2)                     // [5 4 20]
	fmt.Println("slice2元素个数:", len(slice2)) // 3
	fmt.Println("slice2容量:", cap(slice2))   // 3 切片容量可动态变化

	// 切片初始化时不可越界,范围0-len(array)
	// var slice = array[0: len(array)] 可简写为 var slice = array[:]
	// var slice = array[0: end] 可简写为 var slice = array[:end]
	// var slice = array[start: len(array)] 可简写为 var slice = array[start:]

	var slice3 []int = make([]int, 4, 10)
	for i := 0; i < 10; i++ {
		slice3 = append(slice3, i)
	}
	fmt.Println(slice3)                     // [0 0 0 0 0 1 2 3 4 5 6 7 8 9]
	fmt.Println("slice3元素个数:", len(slice3)) // 14
	fmt.Println("slice3容量:", cap(slice3))   // 20 切片容量可动态变化

	// 将slice3追加给slice3
	slice3 = append(slice3, slice3...)
	fmt.Println(slice3) // [0 0 0 0 0 1 2 3 4 5 6 7 8 9 0 0 0 0 0 1 2 3 4 5 6 7 8 9]

	// 切片拷贝
	var slice4 = []int{1, 2, 3, 4, 5}
	var slice5 = make([]int, 10)
	copy(slice5, slice4)
	// copy后 数据空间相互独立
	fmt.Println("slice4:", slice4) // [1 2 3 4 5]
	fmt.Println("slice5:", slice5) // [1 2 3 4 5 0 0 0 0 0]

	// 字符串切片
	str := "hello world"
	strSlice := str[6:]
	fmt.Println(strSlice) // world
	strSlice = str[2:5]
	fmt.Println(strSlice) // llo

	strArray := []byte(str)
	strArray[0] = 'a'
	fmt.Println(string(strArray)) // aello world

	strArray1 := []rune(str)
	strArray1[0] = '中'
	fmt.Println(string(strArray1)) // 中ello world

	// 二维数组
	var array1 [4][3]int
	fmt.Println(array1) // 4行3列 初始值是0
	for i := range array1 {
		for j := range array1[i] {
			fmt.Print(array1[i][j], " ")
		}
		fmt.Println()
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值