"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 중복 항목을 만들지 않고 Go에서 슬라이스 항목을 어떻게 이동합니까?

중복 항목을 만들지 않고 Go에서 슬라이스 항목을 어떻게 이동합니까?

2024년 11월 10일에 게시됨
검색:725

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:]...)

이 접근 방식은 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