Thứ Bảy, 11 tháng 4, 2020

[Golang] Array and Slice


Array

An Array là một numbered sequence of elements (chuỗi của các phần tử được đánh số) có cùng single types với một fixed length - length của một array là không thể change được.

Ví dụ về một array:

var x [5] int

  • Khai báo một array x chứa các elements có type là int
  • Array x có độ dài là 5
  • Khi khở tạo, tất cả các phần tử sẽ có giá trị là 0. x sẽ có giá trị như sau: [0 0 0 0 0]


Ta có thể add giá trị cho phần tử thứ 5 như sai:
x[4] = 100
Trong đó, 4 là index của phần tử thứ 5 trong array. Chú ý rằng, similar to các ngôn ngữ khác:

  • index luôn được bắt đầu bằng 0
  • index kết thúc bằng -1


Ta cũng có thể khởi tạo array như sau, short hand declaration:


x := [5]int64{1,2,3,4,5}

Chúng ta cũng có thể bỏ qua length của array khi sử dụng short hand declaration sử dụng ... :

x := [...]int{1,2,3} 

Khi đó, compiler  sẽ tự define leng của array là 3.

Slice


Slice là một segment (một đoạn) của một array. Tương tự như array, Slice chỉ hold các phần tử có củng type, indexible  và có một length. Tuy nhiên, length của một slice có thể thay đổi được.

Khi tạo một slice, chúng ta có thể "bỏ trống" capacity :

x:= []int{1,2,3}

Chúng ta cũng có thể tạo ra một Slice sử dụng Make:

x := make([]int, 5, 10)

Hàm make return một slice được associated (tham chiếu) đến một underlying array có:
  • length = 5
  • capacity = 10

khi sử dụng make, chúng ta cũng có thể bỏ qua length và capacity của slice
x := make([]int)
Note: Khi sử dụng make, sẽ return lại một initialed value T, chứ không return *T do array (giống với map, channel) là những type cần phải khởi taọ trước rồi mới sử dụng được.

Slice Functions

1. Append

Tạo một slice mới từ slice ban đầu và append các phần tử mới vào cuối:
x := []int{1,2,3}         // x: [1,2,3]
y := append(x, 4)       // y: [1,2,3,4]

2. Copy

        x := []int{1,2,3}         // x: [1,2,3]
        y := make([]int, 2)
       copy(y, x)
     
Sau khi chạy chương trình trên:


  • Slice x: [1,2,3]
  • Slice y: [1,2]


Do length của y là 2 nên nó chỉ copy được 2 giá trị đầu trong slice x, còn giá trị thứ 3 không đuọc copy vì y không còn chỗ chứa


Kết luận:

Array và Slice:

Giống nhau:
  • Cùng là numbered sequence of elements có cùng type

Khác nhau:

  • Length của Array là cố định, không đổi được. Length của slice thay đổi được







Không có nhận xét nào:

Đăng nhận xét