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

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

PHPz
PHPz앞으로
2024-02-09 16:36:07432검색

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

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으로 문의하시기 바랍니다. 삭제