GO数组

Array(数组)

数组是同一种数据类型元素的集合。 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。
数组定义:
var 数组变量名 [元素数量]T

var a1 [3]int       //定义一个长度为3且存放int类型的数组
var a2 [2]string    //定义一个长度为3且存放string类型的数组
a1 = [3]int{1,2,3}  //数组的初始化
a2 = [2]string{"bj","tj"}
fmt.Println(a1)     //[1 2 3]
fmt.Println(a2)     //[bj tj]

 

数组可以通过下标进行访问,下标是从0开始,最后一个元素下标是:len-1.
数组的初始化
可以先定义后赋值,也可以让编译器根据初始值的个数自行推断数组的长度。

var num = [...]int{1,2,3,4,5}
var city = [...]string{"bj","tj","sz","gz"}
fmt.Println(num)        //[1 2 3 4 5]
fmt.Printf("%T\n",num)  //[5]int
fmt.Println(city)       //[bj tj sz gz]
fmt.Printf("%T\n",city) //[4]string

还可以根据索引值初始化数组:

var e [3]int
e = [3]int{2:1}
fmt.Println(e)  //[0 0 1]

 

数组的遍历

a := [...]int{1,3,5,7,8}
//for循环遍历
for i:=0;i<len(a);i++{
    fmt.Println(a[i])
}
//for range遍历
for k,v := range a{
    fmt.Println(k,v)
}

 冒泡排序

func main() {
    arr01 := [...]int{54,123,11,22,875,124}
    for i :=1;i<len(arr01);i++{
        //fmt.Println(arr01[i])
        for j:=0;j<len(arr01)-i;j++{
            if arr01[j] > arr01[j+1]{
                arr01[j],arr01[j+1] = arr01[j+1],arr01[j]
            }
        }
        fmt.Println(arr01)
    }
}

 

多维数组

二维数组定义

//二维数组定义
    two := [3][2]string{
        {"beijing","shanghai"},
        {"广州","深圳"},
    }
    fmt.Println(two)        //[[beijing shanghai] [广州 深圳] [ ]]
    fmt.Println(two[1][1])  //深圳
    //多维数组只有第一层可以使用...来让编译器推导数组长度
    two1 := [...][2]string{
        {"beijing","shanghai"},
        {"广州","深圳"},
        {"广州","深圳"},
        {"广州","深圳"},
    }
    fmt.Println(two1)   //[[beijing shanghai] [广州 深圳] [广州 深圳] [广州 深圳]]

 

二维数组遍历

for _,v1 :=range two1{
        for _,v2 :=range v1{
            fmt.Printf("%s\t",v2)
        }
        fmt.Println()
    }
输出:beijing shanghai

广州 深圳

广州 深圳

广州 深圳

 


数组是值类型
数组是值类型,赋值和传参会复制整个数组。因此改变副本的值,不会改变本身的值。

//数组是值类型
    s1 := [2]int{1,2}
    s2 := s1    //s1拷贝一份给s2
    s2[1] = 10
    fmt.Println(s1)     //[1  2]
    fmt.Println(s2)     //[1 10]
    //多维数组
    s3 := [...][2]int{
        {1,2},
        {3,4},
    }
    s4 := s3
    s4[1][1] = 10
    fmt.Println(s3)     //[[1 2] [3 4]]
    fmt.Println(s4)     //[[1 2] [3 10]]

 

转载于:https://www.cnblogs.com/aresxin/p/GO-shu-zu.html

<think>首先,用户的问题是:“golang 数组取切片”,翻译成英文是“Golang array take slice”。我需要用中文回答这个问题。问题似乎是关于如何在Go语言中从数组获取切片。 关键点是: - 使用中文回答问题。 - 回答后,必须提出3-5个相关问题。 - 相关问题必须以“§§相关问题§§”开头,且在第一行完整输出。 - 禁止换行分散,意思是相关问题的列表应该紧凑,没有额外的换行。 - 最后,所有内容必须符合规则,否则回答无效。 回顾示例格式: - 首先,回答问题的内容。 - 然后,输出“§§相关问题§§”,紧接着是相关问题列表,如“1. ··· 2. ··· 3. ···”,没有换行分散。 所以,我的回答结构应该是: 1. 解释如何在Go中从数组获取切片。 2. 以中文回答。 3. 结束时,输出“§§相关问题§§”,然后列出3-5个相关问题。 现在,内容部分: - 在Go中,数组是固定大小的,切片是动态大小的视图。 - 要从数组获取切片,可以使用切片操作符:`array[start:end]`,其中start和end是索引。 - 例如:`arr := [5]int{1,2,3,4,5}`,然后 `slice := arr[1:4]` 会得到 `[2,3,4]`。 - 解释基本概念。 确保回答简洁明了。 然后,提出相关问题: - 相关问题应该基于用户的问题和我的回答。 - 用户的问题是“golang 数组取切片”,所以相关问题可能涉及: 1. 切片和数组的区别。 2. 如何修改切片影响原数组。 3. 切片的基本操作。 4. 性能考虑。 5. 常见错误。 列出3-5个: 1. Go语言中数组和切片的主要区别是什么? 2. 如何从切片创建新的切片? 3. 修改切片会影响原始数组吗?为什么? 4. 在Go中,切片的容量和长度如何工作? 5. 如何避免在切片操作中出现索引越界错误? 确保问题是相关的。 最后,输出格式: - 回答内容。 - 然后,直接“§§相关问题§§”后跟问题列表,例如: §§相关问题§§ 1. ... 2. ... 3. ... 没有额外的换行。 编写回答: - 先用中文解释。 - 可能包括一个简单的代码示例,因为用户提到了“golang”,类似于示例中的Python代码。 - 示例格式有代码块,所以我应该包括一个Go代码示例。 用户问题:“golang 数组取切片”,所以重点是操作。 代码示例: ```go package main import "fmt" func main() { // 定义一个数组 arr := [5]int{1, 2, 3, 4, 5} // 从数组取切片 slice := arr[1:4] // 索引从1开始到4(不包括4),所以是元素2,3,4 fmt.Println(slice) // 输出: [2 3 4] } ``` 在回答中包括这个。 然后结束。</think>在 Go 语言中,数组是固定大小的序列,而切片是动态大小的视图,可以基于数组创建。要从数组获取切片,使用切片操作符 `[start:end]`,其中 `start` 是起始索引(包含),`end` 是结束索引(不包含)。索引从 0 开始,如果省略 `start` 则默认为 0,省略 `end` 则默认为数组长度。切片是引用类型,修改切片会影响原数组。 示例代码: ```go package main import "fmt" func main() { // 定义一个数组 arr := [5]int{10, 20, 30, 40, 50} // 从数组取切片:索引1到3(不包含3) slice := arr[1:3] fmt.Println(slice) // 输出: [20 30] // 修改切片会影响原数组 slice[0] = 99 fmt.Println(arr) // 输出: [10 99 30 40 50] } ``` 在这个例子中,`arr[1:3]` 创建了一个包含原数组索引 1 和 2 元素的切片。切片共享底层数组数据,因此对切片的修改会反映到原数组上。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值