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]
お気づきのとおり、挿入時に元の位置にある項目が複製されます。
解決策:
正しくするにはスライス内で項目を移動するには、次の方法を使用できます:
元の位置から項目を削除します:
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 中国語 Web サイトの他の関連記事を参照してください。