【GO】切片练习题

创建切片

题目描述

使用三种不同的方式创建包含元素1, 2, 3, 4, 5的切片,并输出它们。

输出示例

方式1(直接创建):1 2 3 4 5

方式2(make创建):1 2 3 4 5

方式3(从数组创建):1 2 3 4 5

实现代码

Go 复制代码
package main

import "fmt"

func main() {
    // 方式1:直接创建
    slice1 := []int{1, 2, 3, 4, 5}
    
    // 方式2:使用make创建并初始化
    slice2 := make([]int, 5)
    slice2[0], slice2[1], slice2[2], slice2[3], slice2[4] = 1, 2, 3, 4, 5
    
    // 方式3:从数组创建
    arr := [5]int{1, 2, 3, 4, 5}
    slice3 := arr[:]
    
    fmt.Printf("方式1(直接创建):%v\n", slice1)
    fmt.Printf("方式2(make创建):%v\n", slice2)
    fmt.Printf("方式3(从数组创建):%v\n", slice3)
}

切片截取

题目描述

创建切片0,1,2,3,4,5,6,7,8,9,截取并输出以下部分:

  • 前3个元素

  • 第3到第6个元素

  • 后4个元素

输出示例

原切片:0 1 2 3 4 5 6 7 8 9

前3个元素:0 1 2

第3到第6个元素:2 3 4 5

后4个元素:6 7 8 9

实现代码

Go 复制代码
package main

import "fmt"

func main() {
    slice := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
    
    slice1 := slice[:3]
    slice2 := slice[2:6]
    slice3 := slice[6:]
    
    fmt.Printf("原切片:%v\n", slice)
    fmt.Printf("前3个元素:%v\n", slice1)
    fmt.Printf("第3到第6个元素:%v\n", slice2)
    fmt.Printf("后4个元素:%v\n", slice3)
}

前后缀追加

题目描述

创建切片mainSlice=4,5,6,前缀切片prefix=1,2,3,后缀切片suffix=7,8,9,将前缀和后缀分别追加到mainSlice的前后。

输出示例

主切片:4 5 6

前缀:1 2 3

后缀:7 8 9

最终结果:1 2 3 4 5 6 7 8 9

实现代码

Go 复制代码
package main

import "fmt"

func main() {
    mainSlice := []int{4, 5, 6}
    prefix := []int{1, 2, 3}
    suffix := []int{7, 8, 9}
    
    fmt.Printf("主切片:%v\n", mainSlice)
    fmt.Printf("前缀:%v\n", prefix)
    fmt.Printf("后缀:%v\n", suffix)
    
    // 先追加后缀到主切片
    mainSlice = append(mainSlice, suffix...)
    // 再将前缀追加到最前面(通过创建新切片)
    result := append(prefix, mainSlice...)
    
    fmt.Printf("最终结果:%v\n", result)
}

使用copy函数复制切片

题目描述

创建切片src=1,2,3,4,5和长度为3的切片dst,使用copy函数将src的前3个元素复制到dst,输出结果。

输出示例

源切片:1 2 3 4 5

目标切片:1 2 3

复制元素个数:3

实现代码

Go 复制代码
package main

import "fmt"

func main() {
    src := []int{1, 2, 3, 4, 5}
    dst := make([]int, 3)
    
    copied := copy(dst, src)
    
    fmt.Printf("源切片:%v\n", src)
    fmt.Printf("目标切片:%v\n", dst)
    fmt.Printf("复制元素个数:%d\n", copied)
}

综合应用

题目描述

创建切片"苹果","香蕉","橙子","葡萄","西瓜",完成以下操作并输出:

  1. 输出原切片

  2. 输出切片长度和容量

  3. 追加"芒果"和"草莓"

  4. 截取前4个元素

  5. 将第2个元素改为"樱桃"

  6. 输出最终结果

输出示例

原切片:苹果 香蕉 橙子 葡萄 西瓜

长度:5,容量:5

追加后:苹果 香蕉 橙子 葡萄 西瓜 芒果 草莓

截取前4个:苹果 香蕉 橙子 葡萄

修改后:苹果 樱桃 橙子 葡萄

实现代码

Go 复制代码
package main

import "fmt"

func main() {
    fruits := []string{"苹果", "香蕉", "橙子", "葡萄", "西瓜"}
    
    fmt.Printf("原切片:%v\n", fruits)
    fmt.Printf("长度:%d,容量:%d\n", len(fruits), cap(fruits))
    
    // 追加元素
    fruits = append(fruits, "芒果", "草莓")
    fmt.Printf("追加后:%v\n", fruits)
    
    // 截取前4个
    fruits = fruits[:4]
    fmt.Printf("截取前4个:%v\n", fruits)
    
    // 修改元素
    fruits[1] = "樱桃"
    fmt.Printf("修改后:%v\n", fruits)
}
相关推荐
平头哥AI9 小时前
Day 01 | go run 跑通第一个 Go 程序,go build 留下一个能拷走的 exe
开发语言·后端·golang
2601_9622965110 小时前
如何使用Golang包路径_管理本地和远程模块引用
golang·数据转换·变量定义·常用库·编程语言区别
FfHUCisI14 小时前
GMP 调度器:Go 并发的心脏是如何跳动的
开发语言·golang·php
我不会起名字32215 小时前
一天一道算法题(26):栈的简单应用
java·数据结构·python·算法·leetcode·golang·
gsls20080816 小时前
告别 Vault 的复杂度:用 Go 标准库给 Windows 凭据管理器装上 MCP
windows·golang·mcp
名字还没想好☜17 小时前
Go 时间格式化为什么用 2006-01-02:time.Format/Parse 的参考时间、时区与解析踩坑
开发语言·后端·golang·go
FfHUCisI1 天前
Golang Map 哈希表实现
golang·哈希算法·散列表
源代码•宸1 天前
前置准备:定时微服务背景和现状
开发语言·经验分享·后端·微服务·云原生·架构·golang
李燚1 天前
把规则搬回家:三个 BC 的贫血→充血重构实录(第103篇)
golang·agent·ddd·领域驱动设计·eino·deepflux·eino adk
astronautyi1 天前
Go 运行时内存分配与 GC 位图深度剖析
开发语言·后端·golang