code

Array.Add vs +=

starcafe 2023. 4. 8. 09:04
반응형

Array.Add vs +=

PowerShell 어레이에서 다음과 같은 흥미로운 동작을 발견했습니다.

$array = @()

그런 다음 다음 다음 명령어를 사용하여 항목을 추가합니다.$array.Add("item")method에서 다음 오류가 발생합니다.

"1" 인수를 사용하여 "추가"를 호출하는 예외: "수집이 고정 크기였습니다."

그러나 다음을 사용하여 항목을 추가하는 경우$array += "item"아이템은 문제없이 접수되고 "크기 제한"은 적용되지 않는 것 같습니다.

왜 이러한가?

를 사용하는 경우$array.Add()기존 배열에 요소를 추가하려고 합니다.어레이는 고정된 크기의 집합이므로 확장할 수 없기 때문에 오류가 발생합니다.

$array += $element기존 어레이 + 새 아이템과 동일한 요소를 사용하여 어레이를 만듭니다.이 새로운 대형 어레이는 기존 어레이를 대체합니다.$array-스위치

+= 연산자를 사용하여 요소를 배열에 추가할 수 있습니다.이 어레이를 사용하면 윈도우즈 PowerShell은 원래 어레이의 값과 추가 가치를 사용하여 새 어레이를 생성합니다.예를 들어 값이 200인 요소를 $a 변수의 배열에 추가하려면 다음과 같이 입력합니다.

    $a += 200

출처: 약_어레이

+=는 비용이 많이 드는 작업이기 때문에 많은 아이템을 추가할 필요가 있는 경우 가능한 한 적은 조작으로 추가할 필요가 있습니다.예를 들어 다음과 같습니다.

$arr = 1..3    #Array
$arr += (4..5) #Combine with another array in a single write-operation

$arr.Count
5

이것이 불가능할 경우 다음과 같은 보다 효율적인 수집을 사용하는 것이 좋습니다.List또는ArrayList(다른 답을 참조).

동적 크기의 배열을 원하는 경우 목록을 작성해야 합니다.뿐만 아니라.Add()@frode-f의 설명대로라면 다이내믹 어레이가 메모리 효율이 높고, 어쨌든 더 좋은 프랙티스입니다.

게다가 사용하기 쉬워요.

어레이 선언 대신 다음을 수행합니다.

$outItems = New-Object System.Collections.Generic.List[System.Object]

아이템 추가는 간단합니다.

$outItems.Add(1)
$outItems.Add("hi")

또한 어레이가 필요한 경우에도 사용할 수 있는 기능이 있습니다.

$outItems.ToArray()

비효율적인 어레이를 사용하지 않고 어레이를 작성하기 위한 가장 일반적인 관용어+=루프의 출력에서는 다음과 같습니다.

$array = foreach($i in 1..10) { 
  $i
}
$array

기존 배열에 추가:

[collections.arraylist]$array = 1..10
$array.add(11) > $null

언급URL : https://stackoverflow.com/questions/14620290/array-add-vs

반응형