Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Memindahkan Item dalam Sekeping dalam Pergi Tanpa Penduaan?

Bagaimana untuk Memindahkan Item dalam Sekeping dalam Pergi Tanpa Penduaan?

Linda Hamilton
Linda Hamiltonasal
2024-11-02 09:06:29697semak imbas

How to Move an Item Within a Slice in Go Without Duplication?

Menggerakkan Item Dalam Slice dalam Go

Dalam Go, adalah perkara biasa untuk memanipulasi kepingan, yang merupakan struktur data dinamik yang memegang urutan unsur. Satu tugasan yang mungkin anda hadapi ialah mengalihkan item dari satu kedudukan ke satu lagi dalam kepingan.

Untuk menangani perkara ini, anda boleh mencuba pendekatan berikut:

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)

Walau bagaimanapun, pendekatan ini menghasilkan dalam tingkah laku yang tidak dijangka:

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] 

Seperti yang anda perhatikan, item dalam kedudukan asal diduplikasi apabila dimasukkan.

Penyelesaian:

Untuk betul alihkan item dalam kepingan, anda boleh menggunakan pendekatan berikut:

  1. Alih keluar Item daripada Kedudukan Asalnya:

    removeItem := slice[indexToRemove]
    updatedSlice := append(slice[:indexToRemove], slice[indexToRemove+1:]...)
    fmt.Println("Updated slice before moving:", updatedSlice)
  2. Masukkan Item pada Kedudukan Baharu:

    insertedSlice := append(updatedSlice[:indexWhereToInsert], removeItem)
    finalSlice := append(insertedSlice, updatedSlice[indexWhereToInsert:]...)
    fmt.Println("Final slice after moving:", finalSlice)

Berikut ialah contoh kod berfungsi:

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)
}

Output :

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]

Atas ialah kandungan terperinci Bagaimana untuk Memindahkan Item dalam Sekeping dalam Pergi Tanpa Penduaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn