「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 重複を作成せずに Go でスライス項目を移動するにはどうすればよいですか?

重複を作成せずに Go でスライス項目を移動するにはどうすればよいですか?

2024 年 11 月 10 日に公開
ブラウズ:982

How do you move a slice item in Go without creating duplicates?

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:]...)
newSlice := append(slice[:indexWhereToInsert], 1)
slice = append(newSlice, slice[indexWhereToInsert:]...)

アイテム操作のためのカスタム関数の利用

スライスを手動で変更する代わりに、挿入と削除のための専用関数を作成できます:

func insertInt(配列 []int, 値 int, インデックス int) []int { return append(array[:index], append([]int{value}, array[index:]...)...) } funcmoveInt(array []int,index int) []int { return append(配列[:インデックス], 配列[インデックス1:]...) }
func insertInt(array []int, value int, index int) []int {
    return append(array[:index], append([]int{value}, array[index:]...)...)
}

func removeInt(array []int, index int) []int {
    return append(array[:index], array[index 1:]...)
}
アイテムを正確に移動する

これらのヘルパー関数を使用すると、アイテムの移動が簡単になります:

func moveInt(array []int 、srcIndex int、dstIndex int) []int { 値 := 配列[srcIndex] return insertInt(removeInt(array, srcIndex), value, dstIndex) }
func insertInt(array []int, value int, index int) []int {
    return append(array[:index], append([]int{value}, array[index:]...)...)
}

func removeInt(array []int, index int) []int {
    return append(array[:index], array[index 1:]...)
}
サンプルの実装と出力

func main() { スライス := []int{0,1,2,3,4,5,6,7,8,9} fmt.Println("元のスライス:", スライス) スライス = insertInt(スライス, 2, 5) fmt.Println("挿入後:", スライス) スライス =removeInt(スライス, 5) fmt.Println("削除後:", スライス) スライス = moveInt(スライス, 1, 4) fmt.Println("移動後:", スライス) }
func main() {
    slice := []int{0,1,2,3,4,5,6,7,8,9}

    fmt.Println("Original slice:", slice)

    slice = insertInt(slice, 2, 5)
    fmt.Println("After insertion:", slice)

    slice = removeInt(slice, 5)
    fmt.Println("After removal:", slice)

    slice = moveInt(slice, 1, 4)
    fmt.Println("After moving:", slice)
}

元のスライス: [0 1 2 3 4 5 6 7 8 9] 挿入後:[0 1 2 3 4 2 5 6 7 8 9] 削除後: [0 1 2 3 4 5 6 7 8 9] 移動後: [0 2 1 3 4 5 6 7 8 9]

Original slice: [0 1 2 3 4 5 6 7 8 9]
After insertion: [0 1 2 3 4 2 5 6 7 8 9]
After removal: [0 1 2 3 4 5 6 7 8 9]
After moving: [0 2 1 3 4 5 6 7 8 9]
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3