03.切片操作

JJJhr發表於2024-07-08

在 Go 語言中,切片(slice)提供了許多強大的操作,可以幫助開發者靈活地處理資料。下面是一些常見的切片操作及其示例:

1. 建立和初始化切片

使用字面量初始化

package main

import "fmt"

func main() {
    slice := []int{1, 2, 3, 4, 5}
    fmt.Println("Slice:", slice)
}

使用 make 函式初始化

package main

import "fmt"

func main() {
    slice := make([]int, 5)
    fmt.Println("Slice with make:", slice)
}

從陣列或其他切片建立

package main

import "fmt"

func main() {
    arr := [5]int{10, 20, 30, 40, 50}
    slice := arr[1:4]
    fmt.Println("Slice from array:", slice)
}

2. 訪問和修改切片元素

訪問元素

package main

import "fmt"

func main() {
    slice := []int{1, 2, 3, 4, 5}
    fmt.Println("Element at index 0:", slice[0])
}

修改元素

package main

import "fmt"

func main() {
    slice := []int{1, 2, 3, 4, 5}
    slice[1] = 20
    fmt.Println("Modified slice:", slice)
}

3. 獲取切片的長度和容量

獲取長度

package main

import "fmt"

func main() {
    slice := []int{1, 2, 3, 4, 5}
    fmt.Println("Length:", len(slice))
}

獲取容量

package main

import "fmt"

func main() {
    slice := []int{1, 2, 3, 4, 5}
    fmt.Println("Capacity:", cap(slice))
}

4. 動態增加切片元素

使用 append 函式

package main

import "fmt"

func main() {
    slice := []int{1, 2, 3}
    slice = append(slice, 4, 5)
    fmt.Println("Appended slice:", slice)
}

5. 切片的切片操作

從切片中建立子切片

package main

import "fmt"

func main() {
    slice := []int{1, 2, 3, 4, 5}
    subSlice := slice[1:4]
    fmt.Println("Sub-slice:", subSlice)
}

6. 遍歷切片

使用 for 迴圈

package main

import "fmt"

func main() {
    slice := []int{1, 2, 3, 4, 5}
    for i := 0; i < len(slice); i++ {
        fmt.Println(slice[i])
    }
}

使用 range 關鍵字

package main

import "fmt"

func main() {
    slice := []int{1, 2, 3, 4, 5}
    for index, value := range slice {
        fmt.Printf("Index: %d, Value: %d\n", index, value)
    }
}

7. 切片的複製

使用 copy 函式

package main

import "fmt"

func main() {
    source := []int{1, 2, 3}
    destination := make([]int, len(source))
    copy(destination, source)
    fmt.Println("Destination slice:", destination)
}

8. 刪除切片中的元素

刪除切片中的元素通常需要使用切片的切片操作。

刪除第 i 個元素

package main

import "fmt"

func main() {
    slice := []int{1, 2, 3, 4, 5}
    i := 2
    slice = append(slice[:i], slice[i+1:]...)
    fmt.Println("After deletion:", slice)
}

刪除開頭的元素

package main

import "fmt"

func main() {
    slice := []int{1, 2, 3, 4, 5}
    slice = slice[1:]
    fmt.Println("After deleting first element:", slice)
}

刪除末尾的元素

package main

import "fmt"

func main() {
    slice := []int{1, 2, 3, 4, 5}
    slice = slice[:len(slice)-1]
    fmt.Println("After deleting last element:", slice)
}

9. 多維切片

定義和初始化多維切片

package main

import "fmt"

func main() {
    matrix := [][]int{
        {1, 2, 3},
        {4, 5, 6},
    }
    fmt.Println("2D Slice:", matrix)
}

遍歷多維切片

package main

import "fmt"

func main() {
    matrix := [][]int{
        {1, 2, 3},
        {4, 5, 6},
    }

    for i := 0; i < len(matrix); i++ {
        for j := 0; j < len(matrix[i]); j++ {
            fmt.Printf("matrix[%d][%d] = %d\n", i, j, matrix[i][j])
        }
    }
}

切片操作的總結

切片是 Go 語言中處理動態陣列的核心工具,提供了比陣列更為靈活和高效的操作方式。透過掌握切片的建立、訪問、修改、遍歷、動態增長、複製和刪除等操作,開發者可以更高效地處理各種資料集合。

相關文章