Xóa một phần tử
Bài học 14 trên 21 trong khóa học Slice và map trong Go của Coddy.
Đến giờ, chúng ta đã học cách thêm phần tử vào slice, sao chép slice, so sánh các slice và lấy độ dài của slice.
Bây giờ, câu hỏi là: Làm thế nào để xóa một phần tử cụ thể khỏi slice?
Rất tiếc, không có hàm tích hợp sẵn nào cho việc này, nhưng nếu kết hợp những gì đã học, chúng ta có thể thực hiện thao tác đó.
Giả sử chúng ta có một slice như sau:
books := []string{"Golang", "JavaScript", "Java", "Python", "PostgreSQL", "TypeScript"}Bạn nghĩ chúng ta có thể làm gì nếu cần lấy một slice mới không chứa một phần tử cụ thể, chẳng hạn như xóa "PostgreSQL"?
Ở đây, chúng ta có thể dùng toán tử slice, nếu bạn còn nhớ:
books := []string{"Golang", "JavaScript", "Java", "Python", "PostgreSQL", "TypeScript"}
fmt.Println(books[:4])
fmt.Println(books[5:])Chúng ta sẽ nhận được hai slice như sau:
[Golang JavaScript Java Python]
[TypeScript]Ở đây, chúng ta đã xóa thành công phần tử "PostgreSQL", nhưng cần gộp hai slice này thành một. Vì vậy, chúng ta có thể dùng hàm <strong>append</strong> để nối hai slice:
books := []string{"Golang", "JavaScript", "Java", "Python", "PostgreSQL", "TypeScript"}
books = append(books[:4], books[5:]...)
fmt.Println(books)Trong đoạn code này, chúng ta dùng hàm <strong>append</strong> để thêm slice thứ hai (<strong>books[5:]</strong>) vào phần đầu tiên (<strong>books[:4]</strong>). Lưu ý rằng chúng ta dùng <strong>...</strong> để chuyển phần thứ hai thành các phần tử riêng lẻ rồi thêm chúng vào phần đầu tiên.
Kết quả sẽ là:
[Golang JavaScript Java Python TypeScript]Chúng ta đã xóa thành công phần tử "PostgreSQL" khỏi slice <strong>books</strong>.
Thử thách
DễViết chương trình nhận đầu vào từ người dùng và xóa phần tử trong slice tại chỉ số mà số người dùng nhập vào đại diện cho chỉ số của phần tử cần xóa.
Tự làm thử
package main
import "fmt"
func main() {
// Nhận đầu vào từ người dùng. Đừng thay đổi phần này!
var x int
fmt.Scanln(&x)
// Khai báo một slice. Đừng thay đổi phần này!
lang := []string{"Rust", "Java", "JavaScript", "Golang", "Haskell", "C#"}
// Xóa phần tử tại chỉ số đã chỉ định
// In ra slice sau khi cập nhật
}Tất cả bài học trong Slice và map trong Go
1Giới thiệu
Giới thiệu3Slice phía sau hậu trường
Slice là một mảngTạo slice bằng makeSao chép sliceXóa một phần tửThử thách ôn tập #1Thử thách ôn tập #2Tự luyện tập: Trình biên dịch Go online