>  기사  >  백엔드 개발  >  이동 | 슬라이스를 추가하고 가변 기능으로 보내는 효율적이고 읽기 쉬운 방법

이동 | 슬라이스를 추가하고 가변 기능으로 보내는 효율적이고 읽기 쉬운 방법

王林
王林앞으로
2024-02-05 21:30:11556검색

去 |附加切片并发送到可变参数函数的高效且可读的方法

질문 내용

다음과 같은 기능적 파이프라인이 있다고 가정해 보겠습니다.

으아악

내가 해결하고 싶은 문제는 상속되었기 때문에 functions 中的函数应该在 opts 中的函数之前调用,所以我不能只附加到 opts 但我必须前置 functionsopts (通过 append(functions, opts...) ),然后再次使用 ... 파이프라인의 다음 함수로 보내므로 다음과 같은 이상한 표현이 나옵니다.

으아악

얼마나 효율적인지는 모르겠지만 확실히 이상해 보이는 것 같아요,

이 작업을 수행하는 더 좋은 방법이 있어야 합니다. 그것이 제가 찾고 있는 것입니다. ​​p>

하지만 효율성에 대한 설명은 첨부해 주시면 감사하겠습니다 :)

편집: opts ...functionobject 更改为 opts []functionobject (如@dev.bmax 在评论中建议的那样),因为我在现有代码库中进行了更改,所以我无法更改调用 func{ 的函数1,2,3}

에서 매개변수 유형을 변경할 수 없습니다.
  1. "이상해 보인다"는 것은 단지 "이상해 보인다"는 뜻이 아니라, 이 작업을 두 번(생략 부호) 하면 이상해 보이고 비효율적이라는 뜻입니다(제가 틀렸나요?)

정답


슬라이스 앞에 추가하는 것은 기본적으로 다음 조합이 필요하므로 비효율적입니다.

  • 더 큰 백업 어레이 할당
  • 항목을 슬라이스 끝으로 이동
  • …또는 둘 다.

함수 간의 호출 규칙을 변경하여 옵션을 추가한 다음 역순으로 처리할 수 있다면 더 효율적일 것입니다. 이렇게 하면 항목을 슬라이스 끝으로 반복적으로 이동하는 것을 방지하고 첫 번째 할당을 제외한 모든 할당을 방지합니다(충분한 공간이 미리 할당된 경우).

으아악

참고: func3(opts ...functionobject) / func3(opts...)func3(opts []functionobject) / func3(opts)는 성능면에서 동일합니다. 전자는 슬라이스를 전달하는 데 효과적인 구문 설탕입니다.

그런데 호출 규칙을 지켜야 한다고 말씀하셨는데...

예제 코드에서는 각 함수 내에서 첫 번째, 두 번째, 세 번째, 다섯 번째... 추가 할당이 발생합니다. (작은 슬라이스의 경우) 지원 배열 크기를 두 배로 늘리려면 할당이 필요합니다. append(functions, opts...) 이전 추가로 충분한 여유 용량이 생성되지 않은 경우에도 할당될 수 있습니다.

도우미 기능을 사용하면 코드를 더 읽기 쉽게 만들 수 있습니다. 재사용도 가능합니다. opts 어레이의 예비 용량 지원:

으아악

할당을 더 자세히 설명하기 위한 도우미 함수가 없는 일부 대안:

으아악

앞에 추가할 항목이 포함된 슬라이스를 할당하지 않고 한 단계 더 나아가 opts의 여유 용량을 재사용할 수 있습니다(기능당 0-1 할당). 그러나 이는 복잡하고 오류가 발생하기 쉬우므로 권장하지 않습니다.

위 내용은 이동 | 슬라이스를 추가하고 가변 기능으로 보내는 효율적이고 읽기 쉬운 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제