Có chức năng tích hợp trong Go để sao chép mảng này sang mảng khác không? Thao tác này có hoạt động trong trường hợp có hai mảng chiều (hoặc nhiều hơn) không?Chức năng sao chép các mảng bằng ngôn ngữ Go
Trả lời
Có bất kỳ chức năng tích hợp nào trong ngôn ngữ Go để sao chép mảng này sang mảng khác không?
Có: http://play.golang.org/p/_lYNw9SXN5
a := []string{
"hello",
"world",
}
b := []string{
"goodbye",
"world",
}
copy(a, b)
// a == []string{"goodbye", "world"}
Sẽ làm việc này trong trường hợp hai (hoặc nhiều hơn) mảng chiều?
copy
sẽ làm một bản sao cạn của các hàng: http://play.golang.org/p/0gPk6P1VWh
a := make([][]string, 10)
b := make([][]string, 10)
for i := range b {
b[i] = make([]string, 10)
for j := range b[i] {
b[i][j] = strconv.Itoa(i + j)
}
}
copy(a, b)
// a and b look the same
b[1] = []string{"some", "new", "data"}
// b's second row is different; a still looks the same
b[0][0] = "apple"
// now a looks different
Tôi không nghĩ rằng có một built-in để làm sâu copys của mảng đa chiều: bạn có thể làm điều đó bằng tay như: http://play.golang.org/p/nlVJq-ehzC
a := make([][]string, 10)
b := make([][]string, 10)
for i := range b {
b[i] = make([]string, 10)
for j := range b[i] {
b[i][j] = strconv.Itoa(i + j)
}
}
// manual deep copy
for i := range b {
a[i] = make([]string, len(b[i]))
copy(a[i], b[i])
}
b[0][0] = "apple"
// a still looks the same
chỉnh sửa: như đã chỉ ra trong các ý kiến, tôi cho rằng bằng cách "sao chép một mảng" bạn có nghĩa là "làm một bản sao sâu sắc về một lát", như mảng có thể sâu sao chép với dòng 0.123.điều hành như mỗi câu trả lời jnml của (vì mảng là kiểu giá trị): http://play.golang.org/p/8EuFqXnqPB
cảm ơn rất nhiều. Nó đã giúp –
Bạn đã trả lời câu hỏi: "Có bất kỳ chức năng tích hợp nào trong ngôn ngữ Go để sao chép một lát này sang lát khác không?" Mà có thể là những gì OP thực sự muốn nhưng bạn nên giải thích sự khác biệt giữa mảng và lát. –
Các chính "chức năng" để sao chép một mảng ở Gò là assignment operator =, vì nó là trường hợp đối với bất kỳ giá trị khác của bất kỳ loại nào khác.
package main
import "fmt"
func main() {
var a, b [4]int
a[2] = 42
b = a
fmt.Println(a, b)
// 2D array
var c, d [3][5]int
c[1][2] = 314
d = c
fmt.Println(c)
fmt.Println(d)
}
Output:
[0 0 42 0] [0 0 42 0]
[[0 0 0 0 0] [0 0 314 0 0] [0 0 0 0 0]]
[[0 0 0 0 0] [0 0 314 0 0] [0 0 0 0 0]]
Sử dụng copy
http://play.golang.org/p/t7P6IliMOK
a := []int{1, 2, 3}
var b [3]int
fmt.Println("A:", a)
fmt.Println("B:", b)
copy(b[:], a)
fmt.Println("A:", a)
fmt.Println("B2:", b)
b[1] = 9
fmt.Println("A:", a)
fmt.Println("B3:", b)
OUT:
01.A: [1 2 3]
B: [0 0 0]
A: [1 2 3]
B2: [1 2 3]
A: [1 2 3]
B3: [1 9 3]
- 1. Phân tách (mô đun) bằng các ngôn ngữ chức năng
- 2. Mẫu quan sát bằng ngôn ngữ Go
- 3. ngôn ngữ assembly chức năng
- 4. chức năng đệ quy trong ngôn ngữ đi
- 5. Vim: Chức năng sao chép
- 6. Go mẫu chức năng
- 7. Cách sao chép hoặc sao chép một mảng các mảng
- 8. Ngôn ngữ lập trình Go được viết bằng ngôn ngữ nào?
- 9. Go chức năng gõ
- 10. Tại sao chức năng makemessages cho nội dung ngôn ngữ Django bỏ qua các tệp html?
- 11. Vẽ Sơ Đồ trong ngôn ngữ chức năng
- 12. Lưu đồ ngôn ngữ lập trình chức năng
- 13. chức năng lồng nhau gọi trong GO
- 14. Đặt các kiểu tham số chức năng trong Go
- 15. Các lớp tương đương và liên kết/tìm bằng ngôn ngữ chức năng
- 16. Các dự án nguồn mở được viết bằng ngôn ngữ lập trình chức năng
- 17. UICollectionView - sao chép chức năng Photos.app
- 18. Go (ngôn ngữ) kiểu số/giao diện chung
- 19. Chức năng sao chép/dán trong UITableViewController
- 20. Ngôn ngữ chức năng tốt nhất để làm MapReduce?
- 21. Các chương trình bằng các ngôn ngữ chức năng có nhiều khả năng có tràn ngăn xếp hơn không?
- 22. Ngôn ngữ chức năng & hỗ trợ cho việc ghi nhớ
- 23. Đa luồng trong ... ngôn ngữ chức năng? (Prolog)
- 24. Regex để tìm các nhóm chụp có tên bằng ngôn ngữ lập trình Go
- 25. Khách hàng kho dữ liệu Cassandra trong ngôn ngữ Go
- 26. η-mở rộng bằng một ngôn ngữ chức năng thuần túy
- 27. Thực hiện ESB (Enterprise Service Bus) bằng ngôn ngữ chức năng
- 28. Cách nhận chức năng "virtualhost" trong Go?
- 29. "./..." trong "go install./..." có nghĩa là ngôn ngữ đi?
- 30. Xử lý ngoại lệ trong ngôn ngữ Google Go
Sự đổ vỡ: mảng và lát có thể trông khá giống nhau, hành vi khác nhau. Mảng là giá trị, lát theo tham chiếu (đơn giản). – Christian