Programing

Array.Add vs + =

lottogame 2020. 6. 5. 08:02
반응형

Array.Add vs + =


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()

참고 URL : https://stackoverflow.com/questions/14620290/array-add-vs

반응형