PowerShell Arrays에서 배열을 다음과 같이 선언하면 흥미로운 동작을 발견했습니다.
$array = @()
그런 다음 $array.Add("item")
방법을 사용하여 항목을 추가하려고 하면 다음 오류가 발생합니다.
“1”인수와 함께 “Add”호출 예외 : “Collection의 크기가 고정되었습니다.”
그러나를 사용하여 항목을 추가 $array += "item"
하면 문제없이 항목이 허용되며 “고정 크기”제한이 적용되지 않는 것 같습니다.
왜 이런거야?
답변
$array.Add()
-method를 사용할 때 기존 배열에 요소를 추가하려고합니다. 배열은 고정 된 크기의 모음이므로 확장 할 수 없기 때문에 오류가 발생합니다.
$array += $element
이전 항목 + 새 항목과 동일한 요소로 새 배열을 작성 하고이 새 큰 배열은 $array
-variable 에서 이전 항목을 대체합니다.
+ = 연산자를 사용하여 배열에 요소를 추가 할 수 있습니다. 이를 사용하면 Windows PowerShell은 실제로 원래 배열의 값과 추가 된 값으로 새 배열을 만듭니다. 예를 들어, 값이 200 인 요소를 $ a 변수의 배열에 추가하려면 다음을 입력하십시오.
$a += 200
출처 : about_Arrays
+=
값 비싼 작업이므로 많은 항목을 추가해야하는 경우 가능한 적은 작업으로 항목을 추가해야합니다. 예 :
$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