網頁

2022/11/15

Golang 移除slice指定索引的元素

Go移除slice指定索引的元素。


範例環境:

  • Go 1.19


函式刪除字串slice指定index的元素。

main.go

package main

import "fmt"

func main() {
    strs := []string{"a", "b", "c", "d", "e"}
    re := remove(&strs, 3)
    fmt.Println(re)        // d
    fmt.Println(strs)      // [a b c e]
    fmt.Println(len(strs)) // 4
}

func remove(strs *[]string, i int) string {
    removedElement := (*strs)[i]     // 取得刪除的元素
    copy((*strs)[i:], (*strs)[i+1:]) // 把strs第i+1位置到最後的每個元素複製到strs第i位置後
    (*strs)[len(*strs)-1] = ""       // 把最後的元素設為zero value
    *strs = (*strs)[:len(*strs)-1]   // 重設strs的長度為原本長度-1
    return removedElement
}


方法移除物件slice屬性的元素。

main.go

package main

import "fmt"

type Department struct {
    employees []Employee
}

type Employee struct {
    ID   int
    Name string
}

func (dep *Department) Remove(i int) Employee {
    removedElement := dep.employees[i]
    dep.employees = append(dep.employees[:i], dep.employees[i+1:]...)
    return removedElement
}

func main() {
    dep := Department{
        employees: []Employee{
            {1, "John"},
            {2, "Mary"},
            {3, "Tony"},
        },
    }
    re := dep.Remove(1)
    fmt.Println(re)                 // {2 Mary}
    fmt.Println(len(dep.employees)) // 2
    fmt.Println(dep.employees)      // [{1 John} {3 Tony}]
}


沒有留言:

張貼留言