Wednesday, October 23, 2024

[Golang] Phần 9 – Go Arrays

-

1. Tổng quan.

Trước hết, chúng ta cùng hiểu về mảng trong ngôn ngữ lập trình Go. Mảng được sử dụng để lưu trữ nhiều giá trị có cùng loại trong một biến duy nhất thay vì phải khai báo các biến riêng lẻ cho từng giá trị.

2. Cú pháp khai báo mảng.

Để khai báo một mảng trong Go, có hai cách chính:

Khai báo với var.

var array_name = [length]datatype{values} // here length is defined

or

var array_name = [...]datatype{values} // here length is inferred

Khai báo với := (viết gọn):

array_name := [length]datatype{values} // here length is defined

or

array_name := [...]datatype{values} // here length is inferred

Chú ý, số phần tử (length) xác định số lượng phần tử mà mảng có thể chứa. Trong Go, mảng có số phần tử cố định, nghĩa là số lượng phần tử không thể thay đổi sau khi mảng được khai báo. Số phần tử của mảng có thể được chỉ định bằng một con số hoặc có thể được tự động nhận diện dựa trên số lượng giá trị được cung cấp.

2. Khai báo mảng với số phần tử cố định.

package main
import ("fmt")

func main() {
  var arr1 = [3]int{1,2,3}
  arr2 := [5]int{4,5,6,7,8}

  fmt.Println(arr1)
  fmt.Println(arr2)
}
  • Khai báo và khởi tạo mảng:
    • Dòng var arr1 = [3]int{1,2,3} khai báo một mảng có tên là arr1 với số phần tử là 3 và kiểu dữ liệu là int. Mảng này được khởi tạo với các giá trị 1, 2, và 3.
    • Dòng arr2 := [5]int{4,5,6,7,8} sử dụng cách khai báo ngắn gọn (:=) để khai báo và khởi tạo một mảng có tên là arr2 với số phần tử là 5 và kiểu dữ liệu là int. Mảng này được khởi tạo với các giá trị 4, 5, 6, 7, và 8.
  • In ra giá trị của mảng:
    • Dòng fmt.Println(arr1) in ra giá trị của mảng arr1.
    • Dòng fmt.Println(arr2) in ra giá trị của mảng arr2.
  • Kết quả:
    • Khi chạy chương trình, kết quả được hiển thị là:
[1 2 3]
[4 5 6 7 8]

Điều này cho thấy giá trị của mảng arr1arr2 được in ra màn hình theo đúng thứ tự.

3. Khai báo mảng với số phần tử tự động xác định.

Đoạn code dưới đây trình bày cách khai báo mảng trong ngôn ngữ lập trình Go với số phần tử được tự động nhận diện.

package main
import ("fmt")

func main() {
  var arr1 = [...]int{1,2,3}
  arr2 := [...]int{4,5,6,7,8}

  fmt.Println(arr1)
  fmt.Println(arr2)
}

Dưới đây là phân tích chi tiết:

  • Khai báo và khởi tạo mảng:
    • Dòng var arr1 = [...]int{1,2,3} khai báo một mảng có tên là arr1 và kiểu dữ liệu là int. Go sẽ tự động nhận diện số phần tử của mảng dựa trên số lượng giá trị được cung cấp, nên ở đây mảng arr1số phần tử là 3.
    • Dòng arr2 := [...]int{4,5,6,7,8} sử dụng cách khai báo ngắn gọn để khai báo và khởi tạo mảng arr2. Tương tự, số phần tử của mảng arr2 cũng được tự động phát hiện là 5.
  • In ra giá trị của mảng:
    • Dòng fmt.Println(arr1) in ra giá trị của mảng arr1.
    • Dòng fmt.Println(arr2) in ra giá trị của mảng arr2.

Kết quả.

[1 2 3]
[4 5 6 7 8]

Cả hai mảng arr1arr2 được in ra màn hình với giá trị tương ứng.

4. Khai báo mảng với giá trị là chuỗi (string).

package main
import ("fmt")

func main() {
  var cars = [4]string{"Volvo", "BMW", "Ford", "Mazda"}
  fmt.Print(cars)
}
  • Khai báo và khởi tạo mảng chuỗi:
    • Dòng var cars = [4]string{"Volvo", "BMW", "Ford", "Mazda"} khai báo một mảng có tên là cars với số phần tử là 4 và kiểu dữ liệu là string. Mảng này được khởi tạo với bốn chuỗi khác nhau là “Volvo”, “BMW”, “Ford” và “Mazda”.
  • In ra giá trị của mảng chuỗi:
    • Dòng fmt.Print(cars) in ra giá trị của mảng cars.
  • Kết quả:
    • Khi chạy chương trình, kết quả được hiển thị là:
[Volvo BMW Ford Mazda]
  • Điều này cho thấy giá trị của mảng chuỗi cars được in ra màn hình theo đúng thứ tự.

5. Cách truy cập các phần tử của một mảng.

package main
import ("fmt")

func main() {
  prices := [3]int{10,20,30}

  fmt.Println(prices[0])
  fmt.Println(prices[2])
}

Dòng prices := [3]int{10, 20, 30} khai báo một mảng có tên là prices với số phần tử là 3 và kiểu dữ liệu là int. Mảng này được khởi tạo với ba giá trị là 10, 20, và 30.

Dòng fmt.Println(prices[0]) in ra giá trị của phần tử đầu tiên trong mảng prices. Lưu ý rằng trong mảng, index bắt đầu từ 0, nên prices[0] là phần tử đầu tiên.

Dòng fmt.Println(prices[2]) in ra giá trị của phần tử thứ ba trong mảng prices.

Kết quả được hiển thị là:

10
30

Điều này cho thấy cách truy cập và in ra giá trị của các phần tử trong mảng.

Nhớ rằng trong Go, chỉ số (index) của mảng bắt đầu từ 0 và bạn có thể truy cập các phần tử của mảng bằng cách sử dụng chỉ số tương ứng.

6. Thay đổi giá trị của một phần tử cụ thể trong một mảng.

package main
import ("fmt")

func main() {
  prices := [3]int{10,20,30}

  prices[2] = 50
  fmt.Println(prices)
}

Dưới đây là phân tích chi tiết:

  • Khai báo và khởi tạo mảng:
    • Dòng prices := [3]int{10, 20, 30} khai báo một mảng có tên là prices với số phần tử là 3 và kiểu dữ liệu là int. Mảng này được khởi tạo với ba giá trị là 10, 20, và 30.
  • Thay đổi giá trị của một phần tử:
    • Dòng prices[2] = 50 thay đổi giá trị của phần tử thứ ba trong mảng prices thành 50.
  • In ra mảng sau khi thay đổi:
    • Dòng fmt.Println(prices) in ra mảng prices sau khi giá trị của phần tử thứ ba đã được thay đổi.

Kết quả.

[10 20 50]

Điều này cho thấy giá trị của phần tử thứ ba trong mảng đã được thay đổi thành 50. Như đã thấy, bạn có thể thay đổi giá trị của bất kỳ phần tử nào trong mảng bằng cách sử dụng chỉ số của nó.

7. Khởi tạo mảng với giá trị mặc định của các phần không được tạo.

package main
import ("fmt")

func main() {
  arr1 := [5]int{} //not initialized
  arr2 := [5]int{1,2} //partially initialized
  arr3 := [5]int{1,2,3,4,5} //fully initialized

  fmt.Println(arr1)
  fmt.Println(arr2)
  fmt.Println(arr3)
}
  • Khởi tạo mảng:
    • Dòng arr1 := [5]int{} khai báo và khởi tạo một mảng có tên là arr1 với số phần tử là 5 và kiểu dữ liệu là int. Trong trường hợp này, mảng được khởi tạo nhưng không có giá trị cụ thể, vì vậy tất cả các phần tử của mảng arr1 sẽ được gán giá trị mặc định của kiểu dữ liệu int, là 0.
    • Dòng arr2 := [5]int{1,2} khai báo và khởi tạo một mảng arr2 với số phần tử là 5, nhưng chỉ có hai phần tử được cung cấp giá trị. Các phần tử còn lại sẽ nhận giá trị mặc định của kiểu dữ liệu int, là 0.
    • Dòng arr3 := [5]int{1,2,3,4,5} khai báo và khởi tạo một mảng arr3 với số phần tử là 5 và tất cả các phần tử đều có giá trị được chỉ định.
  • In ra giá trị của mảng:
    • Dòng fmt.Println(arr1), fmt.Println(arr2), và fmt.Println(arr3) in ra giá trị của các mảng tương ứng.

Kết quả.

[0 0 0 0 0]
[1 2 0 0 0]
[1 2 3 4 5]

Điều này thể hiện giá trị của các mảng sau khi được khởi tạo, đồng thời làm rõ rằng các phần tử chưa được khởi tạo sẽ nhận giá trị mặc định của kiểu dữ liệu tương ứng.

Thông thường, khi một mảng không được khởi tạo, các phần tử của nó sẽ nhận giá trị mặc định của kiểu dữ liệu tương ứng. Điều này quan trọng để tránh lỗi do đọc giá trị từ mảng chưa được khởi tạo.

8. Khởi mảng và chỉ gán một số phần tử cụ thể.

package main
import ("fmt")

func main() {
  arr1 := [5]int{1:10,2:40}

  fmt.Println(arr1)
}
  • Khởi tạo mảng với chỉ một số phần tử cụ thể:
    • Dòng arr1 := [5]int{1:10, 2:40} khai báo và khởi tạo một mảng có tên là arr1 với số phần tử là 5 và kiểu dữ liệu là int. Trong trường hợp này, chỉ có hai phần tử của mảng được khởi tạo với giá trị cụ thể.
    • Phần tử thứ hai của mảng (arr1[1]) được gán giá trị 10.
    • Phần tử thứ ba của mảng (arr1[2]) được gán giá trị 40.
    • Các phần tử còn lại của mảng sẽ nhận giá trị mặc định của kiểu dữ liệu int, là 0.
  • In ra giá trị của mảng:
    • Dòng fmt.Println(arr1) in ra giá trị của mảng arr1.

Kết quả.

[0 10 40 0 0]

Trong ví dụ này, cú pháp index: value được sử dụng để chỉ định giá trị cho một phần tử cụ thể trong mảng. Các phần tử không được chỉ định giá trị sẽ nhận giá trị mặc định của kiểu dữ liệu tương ứng.

9. Xác định số phần tử của mảng.

Đoạn code dưới đây sẽ sử dụng hàm len() để xác định số phần tử của mảng trong ngôn ngữ lập trình Go.

package main
import ("fmt")

func main() {
  arr1 := [4]string{"Volvo", "BMW", "Ford", "Mazda"}
  arr2 := [...]int{1,2,3,4,5,6}

  fmt.Println(len(arr1))
  fmt.Println(len(arr2))
}
  • Khai báo và khởi tạo mảng:
    • Dòng arr1 := [4]string{"Volvo", "BMW", "Ford", "Mazda"} khai báo và khởi tạo một mảng có tên là arr1 với số phần tử là 4 và kiểu dữ liệu là string.
    • Dòng arr2 := [...]int{1,2,3,4,5,6} khai báo và khởi tạo một mảng arr2 với số phần tử được tự động phát hiện từ số lượng giá trị được cung cấp và kiểu dữ liệu là int.
  • Sử dụng hàm len():
    • Dòng fmt.Println(len(arr1)) in ra số phần tử của mảng arr1 sử dụng hàm len(). Trong trường hợp này, số phần tử là 4 vì mảng arr1 có 4 phần tử.
    • Dòng fmt.Println(len(arr2)) in ra số phần tử của mảng arr2 sử dụng hàm len(). Trong trường hợp này, số phần tử là 6 vì mảng arr2 có 6 phần tử.

Kết quả.

4
6

Điều này thể hiện cách sử dụng hàm len() để xác định số phần tử của mảng.

Hàm len() trong Go được sử dụng để trả về số phần tử của một mảng, slice, hoặc map. Trong trường hợp của bạn, nó được sử dụng để xác định độ số phần tử dài của hai mảng arr1arr2.

Lấy phần tử cuối cùng trong Arrays.

Để lấy phần tử cuối cùng của một mảng trong ngôn ngữ lập trình Go, bạn có thể sử dụng chỉ số cuối cùng của mảng và truy cập phần tử cuối cùng.

Dưới đây là một ví dụ:

package main

import "fmt"

func main() {
    // Khai báo một mảng
    numbers := [5]int{1, 2, 3, 4, 5}

    // Lấy phần tử cuối cùng của mảng
    lastElement := numbers[len(numbers)-1]

    fmt.Println("Last element of the array:", lastElement)
}

Chúng ta sử dụng len để lấy chiều dài của array, sau đó sử dụng chỉ số length-1 để truy cập phần tử cuối cùng của chúng. Lưu ý rằng trước khi truy cập phần tử cuối cùng, chúng ta cần kiểm tra xem array có phần tử nào không để tránh lỗi khi chiều dài là 0.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories