删除元素
Coddy Go 中的切片和映射 课程的第 14 课,共 21 课。
到目前为止,我们已经学习了如何向切片添加元素、如何复制切片、如何比较切片,以及如何获取切片的长度。
现在来思考一个问题:我们如何从切片中删除指定的元素?
遗憾的是,没有用于此操作的内置函数,但结合我们学过的内容,就能完成这个操作。
假设我们有一个这样的切片:
books := []string{"Golang", "JavaScript", "Java", "Python", "PostgreSQL", "TypeScript"}如果我们需要得到一个不含指定元素的新切片,比如删除 "PostgreSQL",你能想到该怎么做吗?
如果你还记得切片运算符,我们可以这样使用:
books := []string{"Golang", "JavaScript", "Java", "Python", "PostgreSQL", "TypeScript"}
fmt.Println(books[:4])
fmt.Println(books[5:])我们会得到这样的两个切片:
[Golang JavaScript Java Python]
[TypeScript]这样,我们就成功删除了元素 "PostgreSQL",但还需要把这两个切片合并成一个。因此,我们可以使用 <strong>append</strong> 函数来连接这两个切片:
books := []string{"Golang", "JavaScript", "Java", "Python", "PostgreSQL", "TypeScript"}
books = append(books[:4], books[5:]...)
fmt.Println(books)在这段代码中,我们使用 <strong>append</strong> 函数将第二个切片(<strong>books[5:]</strong>)添加到第一部分(<strong>books[:4]</strong>)。注意,我们使用 <strong>...</strong> 将第二部分转换为单独的元素,再将它们添加到第一部分。
结果如下:
[Golang JavaScript Java Python TypeScript]我们已经成功从 <strong>books</strong> 切片中删除了 "PostgreSQL" 这一项。
挑战
简单编写一个程序,接收用户输入,并删除切片中由用户提供的数字 所表示索引对应的项目。
亲手试试
package main
import "fmt"
func main() {
// 获取用户输入。不要修改这里!
var x int
fmt.Scanln(&x)
// 定义一个切片。不要修改这里!
lang := []string{"Rust", "Java", "JavaScript", "Golang", "Haskell", "C#"}
// 删除指定索引处的元素
// 输出更新后的切片
}Go 中的切片和映射中的所有课
自己练习: Go 在线编译器