Cách sao chép một mảng vào mảng khác trong Golang

Thứ hai - 12/05/2025 22:57

Trong Golang, mảng là một chuỗi có độ dài cố định chứa các phần tử của một kiểu cụ thể. Không giống như các lát cắt, mảng có kích thước không đổi, được xác định khi mảng được khai báo. Sao chép một mảng sang mảng khác rất đơn giản nhưng yêu cầu cả hai mảng phải có cùng độ dài và kiểu.

Mảng trong Golang

Ví dụ:

package main

import "fmt"

// Mảng cơ bản được sử dụng trong tất cả ví dụ
var source = [5]int{10, 20, 30, 40, 50}

func main() {
    fmt.Println("Source Array:", source)
}

Cú pháp:

for i := 0; i < len(source); i++ {
    destination[i] = source[i]
}

Sao chép mảng này vào mảng khác trong Golang

 

Dùng loop để sao chép một mảng

Go không cung cấp hàm copy() tích hợp cho mảng, do đó cách phổ biến nhất để sao chép một mảng là lặp qua từng phần tử và gán phần tử đó theo cách thủ công.

Cú pháp

for i := 0; i < len(source); i++ {
    destination[i] = source[i]
}

Ví dụ:

package main
import "fmt"

var source = [5]int{10, 20, 30, 40, 50}

func main() {
    // Tạo mảng đích có cùng kích thước như mảng nguồn
    var destination [5]int

    // Tự tay sao chép từng phần tử
    for i := 0; i < len(source); i++ {
        destination[i] = source[i]
    }

    fmt.Println("Source:", source)
    fmt.Println("Destination:", destination)
}

Kết quả:

Source: [10 20 30 40 50]
Destination: [10 20 30 40 50]

Gán trực tiếp (Chỉ hoạt động với Mảng, Không hoạt động với Slice)

Bạn có thể gán một mảng cho mảng khác nếu chúng có cùng kiểu và độ dài. Phương pháp này không hoạt động với các slice.

Cú pháp

destination = source

Ví dụ

package main
import "fmt"

var source = [5]int{10, 20, 30, 40, 50}

func main() {
    // Sao chép bằng cách gán trực tiếp
    var destination [5]int = source

    fmt.Println("Source:", source)
    fmt.Println("Destination:", destination)
}

Kết quả

Source: [10 20 30 40 50]
Destination: [10 20 30 40 50]

Sử dụng Con trỏ (Nếu Mảng Lớn)

Nếu đang làm việc với các mảng lớn và muốn tránh sao chép, bạn có thể sử dụng con trỏ để tham chiếu đến mảng nguồn. Điều này sẽ không tạo ra một mảng mới nhưng sẽ trỏ đến vị trí bộ nhớ của mảng hiện có.

Cú pháp

destination = &source

Ví dụ

package main
import "fmt"

var source = [5]int{10, 20, 30, 40, 50}

func main() {
    // Tạo một con trỏ tới mảng nguồn
    var destination *[5]int = &source

    fmt.Println("Source:", source)
    fmt.Println("Destination Array via pointer:", *destination)
}

Kết quả

Source: [10 20 30 40 50]
Destination Array via pointer: [10 20 30 40 50]

Lưu ý:

  • Gán trực tiếp chỉ có tác dụng với các mảng có cùng kiểu và độ dài. Nếu bạn thử gán các mảng có kích thước hoặc kiểu khác nhau, bạn sẽ gặp lỗi biên dịch.
  • Sử dụng con trỏ không tạo ra một mảng mới; nó chỉ tham chiếu đến mảng hiện có.

Nguồn tin: Quantrimang.com:

Tổng số điểm của bài viết là: 0 trong 0 đánh giá

  Ý kiến bạn đọc

THỐNG KÊ TRUY CẬP
  • Đang truy cập58
  • Máy chủ tìm kiếm2
  • Khách viếng thăm56
  • Hôm nay14,103
  • Tháng hiện tại25,781
  • Tổng lượt truy cập11,812,168
QUẢNG CÁO
Phan Thanh Phú
Quảng cáo 2
Liên kết site
Đăng nhập Thành viên
Hãy đăng nhập thành viên để trải nghiệm đầy đủ các tiện ích trên site
Thăm dò ý kiến

Bạn thấy Website cần cải tiến những gì?

Lịch Âm dương
Máy tính
Bạn đã không sử dụng Site, Bấm vào đây để duy trì trạng thái đăng nhập. Thời gian chờ: 60 giây