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:]...)
이 접근 방식은 indexToRemove의 항목을 indexWhereToInsert로 이동하려고 하지만 출력에는 이동된 항목의 복사본 두 개가 표시됩니다. 오류는 항목을 제거하고 삽입하는 방식에 있습니다. 대체 접근 방식을 살펴보겠습니다.
항목 조작을 위한 사용자 정의 함수 활용
슬라이스를 수동으로 수정하는 대신 삽입 및 제거를 위한 전용 함수를 만들 수 있습니다.
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 {
value := array[srcIndex]
return insertInt(removeInt(array, srcIndex), value, dstIndex)
}
샘플 구현 및 출력
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)
}
출력:
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]
이 접근 방식은 인덱스 1의 항목을 인덱스 4로 올바르게 이동하여 예상되는 출력을 얻습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3