ホームページ  >  記事  >  バックエンド開発  >  Go でスライス内の項目を重複せずに移動するにはどうすればよいですか?

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-02 09:06:29697ブラウズ

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

Go でのスライス内の項目の移動

Go では、スライスを操作するのが一般的です。スライスは、要素のシーケンス。発生する可能性のあるタスクの 1 つは、スライス内のある位置から別の位置にアイテムを移動することです。

これに対処するには、次のアプローチを試みることができます。

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] 

お気づきのとおり、挿入時に元の位置にある項目が複製されます。

解決策:

正しくするにはスライス内で項目を移動するには、次の方法を使用できます:

  1. 元の位置から項目を削除します:

    removeItem := slice[indexToRemove]
    updatedSlice := append(slice[:indexToRemove], slice[indexToRemove+1:]...)
    fmt.Println("Updated slice before moving:", updatedSlice)
  2. 新しい位置に項目を挿入します:

    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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。