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

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

Linda Hamilton
リリース: 2024-11-02 09:06:29
オリジナル
772 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート