在Go 中移動切片內的項目
在Go 中,操作切片是很常見的,切片是動態資料結構,包含元素的序列。您可能遇到的一項任務是將切片內的項目從一個位置移動到另一個位置。
要解決此問題,您可以嘗試以下方法:
slice := []int{0,1,2,3,4,5,6,7,8,9} indexToRemove := 1 indexWhereToInsert := 4 slice = append(slice[:indexToRemove], slice[indexToRemove+1:]...) fmt.Println("slice:", slice) newSlice := append(slice[:indexWhereToInsert], 1) fmt.Println("newSlice:", newSlice) slice = append(newSlice, slice[indexWhereToInsert:]...) fmt.Println("slice:", slice)
但是,此方法會導致意外行為:
slice: [0 2 3 4 5 6 7 8 9] newSlice: [0 2 3 4 1] slice: [0 2 3 4 1 1 6 7 8 9]
正如您所注意到的,插入時原始位置的項目會重複。
解:
要正確移動切片內的物品時,可以使用以下方法:
將物品從其原始位置移除:
removeItem := slice[indexToRemove] updatedSlice := append(slice[:indexToRemove], slice[indexToRemove+1:]...) fmt.Println("Updated slice before moving:", updatedSlice)
在新位置插入項目:
insertedSlice := append(updatedSlice[:indexWhereToInsert], removeItem) finalSlice := append(insertedSlice, updatedSlice[indexWhereToInsert:]...) fmt.Println("Final slice after moving:", finalSlice)
func main() { slice := []int{0,1,2,3,4,5,6,7,8,9} indexToRemove := 1 indexWhereToInsert := 4 removeItem := slice[indexToRemove] updatedSlice := append(slice[:indexToRemove], slice[indexToRemove+1:]...) fmt.Println("Updated slice before moving:", updatedSlice) insertedSlice := append(updatedSlice[:indexWhereToInsert], removeItem) finalSlice := append(insertedSlice, updatedSlice[indexWhereToInsert:]...) fmt.Println("Final slice after moving:", finalSlice) }輸出:
Updated slice before moving: [0 2 3 4 5 6 7 8 9] Final slice after moving: [0 2 3 4 1 5 6 7 8 9]
以上是如何在 Go 中移動切片內的項目而不重複?的詳細內容。更多資訊請關注PHP中文網其他相關文章!