> 백엔드 개발 > Golang > 슬라이스 복사본의 값을 수정하고 원본 슬라이스에 추가

슬라이스 복사본의 값을 수정하고 원본 슬라이스에 추가

PHPz
풀어 주다: 2024-02-09 16:36:07
앞으로
440명이 탐색했습니다.

슬라이스 복사본의 값을 수정하고 원본 슬라이스에 추가

PHP에서 슬라이스는 배열이나 슬라이스에서 요소의 일부를 선택할 수 있게 해주는 일반적으로 사용되는 데이터 구조입니다. 그러나 때로는 슬라이스를 수정하고 수정된 값을 원래 슬라이스에 추가해야 하는 경우도 있습니다. 이 작업은 PHP에서 슬라이스 복사본의 값을 수정한 다음 array_splice 함수를 사용하여 수정된 복사본을 원래 슬라이스에 추가함으로써 가능합니다. 이 기사에서는 이 방법을 사용하여 슬라이스 수정 및 추가 작업을 구현하는 방법을 자세히 설명합니다.

질문 내용

슬라이스를 복사하고 슬라이스 복사본에 있는 항목의 값을 수정한 다음 복사본을 원본 복사본에 추가하는 함수를 작성하세요. 코드가 슬라이스 복사본뿐만 아니라 원본 슬라이스도 수정하는 것처럼 보입니다.

놀이터로 가기

으아악

내가 실제로 본 것

으아악

무엇을 기대하나요

import "fmt"

type item struct {
    name   string
    number int
}

func main() {
    names := []string{"a", "b"}
    numbers := []int{1, 2}

    items := []*item{}

    for _, name := range names {
        item := &item{name: name}
        items = append(items, item)
    }

    for n, i := range numbers {
        if n > 0 {
            fmt.println(n, "make a copy of the items")
            itemcopies := make([]*item, len(items))
            copy(itemcopies, items)

            fmt.println(n, "set the numbers on the copies")
            for _, item := range itemcopies {
                item.number = i
            }

            fmt.println(n, "append the copies to the original")
            items = append(items, itemcopies...)
        } else {

            fmt.println(n, "first pass set all the items to the first number")
            for _, item := range items {
                item.number = i
            }
        }
    }

    for n, i := range items {
        fmt.printf("%d %+v\n", n, *i)
    }
}
로그인 후 복사

Solution

@jimb 맞습니다. 포인터를 복사하세요.

새 복사본을 생성하려면 구조체 항목에 속하는 복사 함수를 정의하는 것이 좋습니다

으아악

위 내용은 슬라이스 복사본의 값을 수정하고 원본 슬라이스에 추가의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:stackoverflow.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿