• 10/08/2020
  • 24 분을 읽
    • j
    • h
    • V

배열은 근본적 언어의 기능을 가장 프로그래밍 언어입니다. 그것들은 모음입니다.값 또는 피하기 어려운 객체. 배열과 모든 것을 자세히 살펴 보겠습니다.제공 할 것입니다.,

참고

이 기사의 원본 버전은@KevinMarquette 가 작성한 블로그에 나타났습니다. ThePowerShell 팀은이 콘텐츠를 우리와 공유해 주신 Kevin 에게 감사드립니다. 그의 블로그를 확인하십시오 atPowerShellExplained.com.

배열이란 무엇입니까?

터 시작하겠으로 기본적인 기술 설명의 무엇을 배열은 어떻게 사용하는 bymost 프로그래밍 언어가기 전에 내가로 이동 다른 방법으로 PowerShell 을 사용합니다.

배열은 여러 항목의 컬렉션 역할을하는 데이터 구조입니다., 배열을 반복하거나 인덱스를 사용하여 개별 항목에 액세스 할 수 있습니다. 배열은 순차 청크로 생성됩니다.각 값이 다른 값 바로 옆에 저장되는 메모리.

우리가 갈 때 나는 그 세부 사항들 각각을 만질 것이다.

기본 사용법

기 때문에 배열하는 등 기본적인 기능의 PowerShell,거기에 간단한 구문을 위해 작업 withthem 에 있습니다.,

배열

빈 배열을 사용하여 만들 수 있습@()

PS> $data = @()PS> $data.count0

우리는 할 수 있습 배열을 만들고 그것은 씨앗으로 값은 단지 그들을 배치하여@()괄호 안에 표시됩니다.이 배열에는 4 개의 항목이 있습니다. 우리가 호출 할 때$data변수,우리는 우리의 항목의 목록을 참조하십시오. 문자열의 배열 인 경우 문자열 당 한 줄을 얻습니다.

우리는 여러 줄에 배열을 선언 할 수 있습니다. 이 경우 쉼표는 선택 사항이며 일반적으로 남은 것입니다.,

$data = @( 'Zero' 'One' 'Two' 'Three')

그런 식으로 여러 줄에 배열을 선언하는 것을 선호합니다. 여러 항목이있을 때 읽기가 더 쉬워 질뿐만 아니라 sourcecontrol 을 사용할 때 이전 버전과 비교하기가 더 쉽습니다.

기타 구문

일반적으로@()는 배열을 만드는 구문이지만 쉼표로 구분 된 목록은 대부분 작동합니다.,

$data = 'Zero','One','Two','Three'

쓰기-출력을 만들 배열

하나의 멋진 속 작은 언급 할 가치가 사용할 수 있는Write-Output을 빠르게 만들 stringsat 습니다.

$data = Write-Output Zero One Two Three

이것은 편리하기 때문에 당신은 없을 넣어 주위에 따옴표 문자열을 때 매개 변수 acceptsstrings. 나는 스크립트에서 이것을하지 않을 것이지만 콘솔에서 공정한 게임이다.

항목 액세스

이제 항목이있는 배열이 있으므로 해당 항목에 액세스하고 업데이트 할 수 있습니다.,

오프셋

개별 항목에 액세스하려면 0 에서 시작하는 오프셋 값으로 대괄호를 사용합니다. 이 ishow 우리는 첫 번째 항목에서 우리의 배열

PS> $data = 'Zero','One','Two','Three'PS> $dataZero

는 이유는 우리가 사용하여 제기 때문에 여기에 첫 번째 항목이의 시작 부분에 목록을 그래서 우리는 usean 오프셋에 0 품목이 있습니다.더 보기 두 번째 항목으로 가려면 1 의 오프셋을 사용해야합니다.첫 번째 항목을 건너 뜁니다.

PS> $dataOne

마지막 항목이 오프셋 3 에 있음을 의미합니다.,

PS> $dataThree

Index

이제 이유를 확인할 수 있습니다 내가 값을 내가 이것에 대한 예입니다. 나는 이것을 offsetbecause 로 소개했는데,그것이 실제로 무엇인지에 대한 것이지만,이 오프셋은 더 일반적으로 인덱스라고 불린다. 이 작업을 수행하려면 어떻게해야합니까? 이 기사의 나머지 부분에서는 오프셋을 인덱스라고 부릅니다.

특별한 인덱스 트릭

대부분의 언어에서만 지정할 수 있습니다 하나의 숫자로 인덱스와 당신을 얻을 하나의 항목이다.PowerShell 은 훨씬 유연합니다. 한 번에 여러 인덱스를 사용할 수 있습니다., 목록을 제공함으로써인덱스,우리는 여러 항목을 선택할 수 있습니다.

PS> $dataZeroTwoThree

제공된 인덱스의 순서에 따라 항목이 반환됩니다. 색인을 복제하면 두 번 모두 해당 항목을 얻습니다.

PS> $dataThreeZeroThree

우리는 우리를 지정할 수 있는 일련의 숫자로 내장..연산자입니다.

PS> $dataOneTwoThree

역으로도 작동합니다.

PS> $dataThreeTwoOne

음수 인덱스 값을 사용하여 끝에서 오프셋할 수 있습니다. 따라서 목록의 마지막 항목이 필요한 경우-1를 사용할 수 있습니다.,

PS> $dataThree

경계

에서 대부분의 언어는 경우에,당신은에 액세스하려고 하는 항목의 색인되는 지난 배열의 끝,youwould 얻을 어떤 종류의 오류 또는 예외입니다. PowerShell 은 조용히 아무것도 반환하지 않습니다.

PS> $null -eq $dataTrue

할 수 없으로 인덱스 null 배열

경우 변수를$null그리고 당신을 색인화하려는 그 배열과 마찬가지로,당신은System.Management.Automation.RuntimeException예외 메시지와 함께Cannot index into a null array.,

PS> $empty = $nullSP> $emptyError: Cannot index into a null array.

따라서 배열이$null가 아닌지 확인하십시오.

Count

배열 및 기타 컬렉션가 횟수는 시설는 방법을 알려주는 많은 항목 배열에 있습니다.

PS> $data.count4

PowerShell3.0 은 대부분의 개체에 count 속성을 추가했습니다. 단일 객체를 가질 수 있으며1의 수를 가져야합니다.

PS> $date = Get-DatePS> $date.count1

Even$null0를 반환하는 것을 제외하고는 count 속성이 있습니다.,

PS> $null.count0

몇 가지 트랩 여기에는 다시 방문할 때 나는 커버에 대한 검사$null또는 빈 arrayslater 에서 이 문서입니다.

off-by-one 오류

배열은 인덱스 0 에서 시작하기 때문에 일반적인 프로그래밍 오류가 생성됩니다. 오프 바이 원 오류는두 가지 방법으로 도입.

첫 번째 정신적으로 생각하고 당신이 원하는 두 번째 항목을 사용하여 인덱스의2정말 gettingthe 세 번째 항목입니다. 또는 네 개의 항목이 있고 마지막 항목을 원한다고 생각하여 카운트를 사용합니다.마지막 항목에 액세스하십시오.,

$data

PowerShell 은 완벽하게 행복하게 당신이 그렇게 정확히 무엇 항목에 존재하는 인덱스 4:$null. 위에서 배운$data.count - 1또는-1를 사용해야합니다.

PS> $dataThree

이것은 어디에 사용할 수 있습니다-1지수를 얻는 마지막 요소입니다.

PS> $dataThree

Lee Dailey 는 또한$data.GetUpperBound(0)를 사용하여 max indexnumber 를 얻을 수 있다고 지적했습니다.,

PS> $data.GetUpperBound(0)3PS> $dataThree

두 번째 가장 일반적인 방법으로 반복할 때 목록과하지에서 중지합니다. 나는for루프를 사용하는 것에 대해 이야기 할 때 이것을 방문한다.

항목 업데이트

동일한 인덱스를 사용하여 배열의 기존 항목을 업데이트 할 수 있습니다. 이것은 우리에게 직접 액세스 toupdate 개별 항목을 제공합니다.

$data = 'dos'$data = 'tres'

면 우리는 시도를 업데이트 항목에는 과거의 마지막 요소,그 다음 우리는 얻을Index was outside the bounds of the array.오류가 있습니다.배열을 더 크게 만드는 방법에 대해 이야기 할 때 나중에 다시 방문하겠습니다.,

반복

어떤 시점에서 필요할 수 있습을 반복하고 전체 목록에 대한 몇 가지 작업을 수행 eachitem 에 배열입니다.

파이프 라인

배열과 PowerShell 파이프 라인은 서로를 의미합니다. 이것은 가장 간단한 방법 중 하나입니다.그 값보다 처리합니다. 배열을 파이프 라인에 전달할 때 배열 내부의 각 항목은개별적으로 처리됩니다.

PS> $data = 'Zero','One','Two','Three'PS> $data | ForEach-Object {"Item: "}Item: Item: Item: Item: 

지 않은 경우에는 본$PSItem기 전에,단지 그것을 알아와 같은 일을$_., 둘 다 파이프 라인의 현재 객체를 나타 내기 때문에 eitherone 을 사용할 수 있습니다.

ForEach 루프

ForEach루프는 컬렉션에서 잘 작동합니다. 구문을 사용하여:foreach ( <variable> in <collection> )

foreach ( $node in $data ){ "Item: "}

ForEach 방법

I 하는 경향이 있는 것 하나 하지만 그것은 간단한 작업입니다. PowerShell 을 사용하면 컬렉션에서.ForEach()를 호출 할 수 있습니다.

PS> $data.foreach({"Item "})Item Item Item Item 

.foreach()매개 변수는 스크립트를 차단합니다., 괄호를 놓을 수 있고 그냥 스크립트 블록을 제공하십시오.

$data.foreach{"Item "}

이것은 덜 알려진 구문은 그러나 그것은 작품이다. 이foreach메소드가 inPowerShell4.0 에 추가되었습니다.

for루프를 사용에 많은 대부분의 다른 언어 있지만 당신은 그것을 볼 수 없에서 많이 있습니다. 당신이 그것을 볼 때,그것은 종종 배열을 걷는 맥락에 있습니다.

for ( $index = 0; $index -lt $data.count; $index++){ "Item: " -f $data}

첫 번째는 것을 초기화$index0., 그런 다음$indexmustbe$data.count보다 작다는 조건을 추가합니다. 마지막으로 루프 할 때마다1로 theindex 를 늘려야한다고 지정합니다. 이 경우$index++$index = $index + 1의 줄임말입니다.

for루프를 사용할 때마다 조건에 특별한주의를 기울이십시오. 여기서$index -lt $data.count를 사용했습니다. 당신의 논리에서 오프 바이 온에러를 얻기 위해 조건을 약간 잘못 얻는 것은 쉽습니다., 를 사용하는$index -le $data.count또는$index -lt ($data.count - 1)적 soslightly 잘못입니다. 그러면 결과가 너무 많거나 너무 적은 항목을 처리하게됩니다. 이것은클래식 오프 바이 원 오류.

스위치 루프

이것은 간과하기 쉬운 것입니다. Switch 문에 배열을 제공하면 배열의 각 항목을 선택합니다.

$data = 'Zero','One','Two','Three'switch( $data ){ 'One' { 'Tock' } 'Three' { 'Tock' } Default { 'Tick' }}
TickTockTickTock

의 많은 멋진 일이 우리가 할 수 있는 스위치로 문입니다. 나는 이것에 또 다른 articlededicated 있다.,

  • 모든 것을 당신이 이제까지에 대해 알고 싶어 switch 문

값을 업데이트

경우 배열의 컬렉션을 문자열 또는 정수를(가치 종류),때때로 당신은 당신할 수 있습 업데이트 값을 배열을 반복합니다. 위의 루프의 대부분은 값의 복사본을 보유하는 루프의 변수를 사용합니다. 해당 변수를 업데이트하면 배열의 원래 값이 업데이트되지 않습니다.

해당 문에 대한 예외는for루프입니다., 배열을 걷고 값을 업데이트하려는 경우그것의 내부에서,for루프는 당신이 찾고있는 것입니다.

for ( $index = 0; $index -lt $data.count; $index++ ){ $data = "Item: " -f $data}

이 예제로 값을 지지털화된 이미지에 대한 정보가 변경,다음 사용하는 동일 인덱스 assignit 다.

객체의 배열

지금까지 배열에 배치 한 유일한 것은 값 유형이지만 배열도 containobjects 수 있습니다.

$data = @( @{FirstName='Kevin';LastName='Marquette'} @{FirstName='John'; LastName='Doe'})

많은 cmdlet 은 변수에 할당 할 때 객체 컬렉션을 배열로 반환합니다.,

$processList = Get-Process

의 모든 기본적인 기능을 우리는 이미 이야기에 대해 여전히 적용을 배열체 fewdetails 한 가치가 있다.

속성 액세스

인덱스를 사용하여 값 유형과 마찬가지로 컬렉션의 개별 항목에 액세스 할 수 있습니다.

PS> $dataFirstName LastName----- ----Kevin Marquette

속성에 직접 액세스하고 업데이트 할 수 있습니다.,

PS> $data.FirstNameKevinPS> $data.FirstName = 'Jay'PS> $dataFirstName LastName----- ----Jay Marquette

배열 속성

일반적으로 당신이 있을 열거하여 전체 목록은 다음과 같이 접근하는 모든 속성:

PS> $data | ForEach-Object {$_.LastName}MarquetteDoe

또는Select-Object -ExpandProperty합니다.

PS> $data | Select-Object -ExpandProperty LastNameMarquetteDoe

그러나 PowerShell 은LastName를 직접 요청할 수있는 기능을 제공합니다. PowerShell 은 그것들을 열거합니다.우리를 위해 모두 깨끗한 목록을 반환합니다.

PS> $data.LastNameMarquetteDoe

열거는 여전히 발생하지만 그 뒤에 복잡성이 표시되지 않습니다.,

어디에서-객체를 필터링

이것은Where-Object에서 온 그래서 우리는 우리를 필터링할 수 있고 선택 우리가 무엇을 원하는 arraybased 의 특성에 대한 개체입니다.

PS> $data | Where-Object {$_.FirstName -eq 'Kevin'}FirstName LastName----- ----Kevin Marquette

우리는 쓸 수 있는 동일한 쿼리를 얻을FirstName우리가 찾고 있습니다.

$data | Where FirstName -eq Kevin

어디()

배열Where()방법에 있는 그들을 지정할 수 있습니다scriptblock에 대한 필터입니다.

$data.Where({$_.FirstName -eq 'Kevin'})

이 기능은 PowerShell4.0 에 추가되었습니다.,

업체에서 루프

값으로 형식을 업데이트 할 수있는 유일한 방법은 배열을 사용하는 것에 대한 반복하기 때문에 우리가 알아야 할 theindex 대체하는 값입니다. 참조 유형이기 때문에 객체에 더 많은 옵션이 있습니다. 요 여기서 간단한 예제:

foreach($person in $data){ $person.FirstName = 'Kevin'}

루이 걷는 모든 개체$data배열입니다. 객체는 참조 유형이므로$person변수는 배열에 있는 동일한 객체를 참조합니다. 그래서 itsproperties 에 대한 업데이트는 원본을 업데이트합니다.,이 방법으로 전체 객체를 대체 할 수는 없습니다. 에 할당하려고 하면 새로운 객체을$person가변,당신은 당신 업데이트 변수를 참고 다른 것에는 더 이상 pointsto 원래 개체에 배열입니다. 이처럼 작동하지 않을 것이라 기대한다.

foreach($person in $data){ $person = @{ FirstName='Kevin' LastName='Marquette' }}

사업자

운영자에 PowerShell 또한 작품에서 배열입니다. 그들 중 일부는 약간 다르게 작동합니다.

-join

-join연산자는 가장 확실한 연산자이므로 먼저 살펴 보겠습니다., 나는-join연산자를 좋아하고 자주 사용합니다. 그것은 문자 또는 문자열과 배열의 모든 요소를 조인당신이 지정합니다.

PS> $data = @(1,2,3,4)PS> $data -join '-'1-2-3-4PS> $data -join ','1,2,3,4

특징 중 하나는 나에 대해-join연산자를 처리하는 하나의 항목입니다.나는 이것을 로깅과 자세한 메시지 안에 사용한다.

PS> $data = @(1,2,3,4)PS> "Data is $($data -join ',')."Data is 1,2,3,4.

-join$array

Lee Dailey 가 나에게 지적한 영리한 트릭이 있습니다., If you ever want to join everythingwithout 구분 기호,이렇게 하:

PS> $data = @(1,2,3,4)PS> $data -join $null1234

사용할 수 있는-join배열로 매개 변수는 없는 접두어. 내가 말하는이 예제를 살펴보십시오.

PS> $data = @(1,2,3,4)PS> -join $data1234

바꾸기와 분할

다른 연산자는 다음과 같-replace-split실행에 각 품목에서 배열입니다. 나는 말할 수 없다.나는 이런 식으로 그들을 사용한 적이 있지만 여기에 예가 있습니다.,

PS> $data = @('ATX-SQL-01','ATX-SQL-02','ATX-SQL-03')PS> $data -replace 'ATX','LAX'LAX-SQL-01LAX-SQL-02LAX-SQL-03

-담

-contains연산자를 확인 할 수있는 배열의 값을 보이 포함된 경우에는 specifiedvalue.

PS> $data = @('red','green','blue')PS> $data -contains 'green'True

-in

때는 단일 값이 있는지를 확인과 일치하는 하나의 여러 값을 사용할 수 있는-in연산자입니다. 값은 왼쪽에 있고 배열은 오른쪽에 있습니다.

PS> $data = @('red','green','blue')PS> 'green' -in $dataTrue

목록이 큰 경우 비용이 많이들 수 있습니다. 내가 자주 사용하는 regex 패턴으면 나는 더 확인하 타나 몇 가지는 값입니다.,

PS> $data = @('red','green','blue')PS> $pattern = "^({0})$" -f ($data -join '|')PS> $pattern^(red|green|blue)$PS> 'green' -match $patternTrue

-eq 및-ne

평등과 배열은 복잡해질 수 있습니다. 배열이 왼쪽에있을 때 모든 항목이 가져옵니다.공유. True를 반환하는 대신 일치하는 객체를 반환합니다.

PS> $data = @('red','green','blue')PS> $data -eq 'green'green

할 때 사용하는-ne연산자,우리는 모든 값들은 동일하지 않은 우리의 값입니다.

PS> $data = @('red','green','blue')PS> $data -ne 'green'redblue

사용하는 경우에는if()성명,반환되는 값은True값입니다., 값이 반환되지 않으면False값입니다. 이 두 다음 문은 모두True로 평가됩니다.

$data = @('red','green','blue')if ( $data -eq 'green' ){ 'Green was found'}if ( $data -ne 'green' ){ 'And green was not found'}

I’ll 다시 이 순간에 우리가 이야기에 대해 테스트를 위한$null.

-match

-match연산자는 컬렉션의 각 항목을 일치 시키려고 시도합니다.

PS> $servers = @( 'LAX-SQL-01' 'LAX-API-01' 'ATX-SQL-01' 'ATX-API-01')PS> $servers -match 'SQL'LAX-SQL-01ATX-SQL-01

할 때 사용하는-match단일값이 특별한 변수를$Matches얻으로 채워집 matchinfo., 배열이 이런 식으로 처리되는 경우는 아닙니다.

우리는Select-String와 동일한 접근법을 취할 수 있습니다.

$servers | Select-String SQL

I 에서 가까이 보Select-String,-match$matchesvariable 다른 포스트에서 라 사용하는 방법에는 여러 가지 regex.

$null 또는 빈

$null또는 빈 배열에 대한 테스트는 까다로울 수 있습니다. 다음은 배열이있는 일반적인 트랩입니다.한눈에,이 진술은 작동해야하는 것처럼 보입니다.,

if ( $array -eq $null){ 'Array is $null'}

하지만 난 그냥 갔는 방법을-eq각 품목을 검사합에서 배열입니다. 그래서 우리가 할 수 있습의 배열 severalitems 단일$null 값이고 그것을 평가하는$true

$array = @('one',$null,'three')if ( $array -eq $null){ 'I think Array is $null, but I would be wrong'}

이것은 왜 그것은 최고의 연습하는 장소의$null왼쪽에의 연산자입니다. 이것은이 시나리오를 비 문제로 만듭니다.

if ( $null -eq $array ){ 'Array actually is $null'}

A$null배열은 빈 배열과 같은 것이 아닙니다. 배열이 있다는 것을 알고 있다면 확인하십시오.그 안에있는 객체의 수입니다., 배열이$null인 경우 카운트는0입니다.

if ( $array.count -gt 0 ){ "Array isn't empty"}

여기서 조심해야 할 함정이 하나 더 있습니다. 해당 객체가PSCustomObject가 아닌 한 singleobject 가 있더라도count를 사용할 수 있습니다. 이것은 PowerShell6.1 에서 수정 된 버그입니다.그것은 좋은 소식이지만,많은 사람들이 여전히 5.1 에 있고 그것을 조심해야합니다.

PS> $object = @{Name='TestObject'}PS> $object.count$null

경우 당신은 여전히 PowerShell5.1,래핑할 수 있는 객체에 배열을 확인하기 전에 계산 toget 정확한 계산합니다.,

if ( @($array).count -gt 0 ){ "Array isn't empty"}

을 완벽하게 안전한 사용에 대한 확인$null,다음을 확인합니다.

if ( $null -ne $array -and @($array).count -gt 0 ){ "Array isn't empty"}

모 eq

나는 최근에 누군가가 요구하는 방법을 확인하는 모든 값 배열을 지정한 값입니다.Reddit user/u/bis 는 잘못된 값을 확인하고 그 결과를 밝히는 영리한 솔루션을 가지고있었습니다.

$results = Test-Somethingif ( -not ( $results -ne 'Passed') ){ 'All results a Passed'}

배열에 추가

이 시점에서 배열에 항목을 추가하는 방법을 궁금해하기 시작했습니다. 빠른 대답은 당신이 할 수 없다는 것입니다.배열은 메모리에 고정 된 크기입니다., 필요하신 경우에는 그것을 성장 또는 추가 단일 항목을,그 다음 새로 만들 필요가 배열로 복사한 모든 값을 통해서 배열입니다. 이것은 많은 작업처럼 들리지만 PowerShell 은 새로운 배열을 만드는 복잡성을 숨 깁니다. Powershell 은 배열에 대한 추가 연산자(+)를 단순화합니다.

참고

PowerShell 은 빼기 연산을 구현하지 않습니다. Anarray 에 대한 유연한 대안을 원한다면 일반List객체를 사용해야합니다.,

배열 추가

배열과 함께 추가 연산자를 사용하여 새 배열을 만들 수 있습니다. 그래서 주어진 이러한 두 가지 배열

$first = @( 'Zero' 'One')$second = @( 'Two' 'Three')

우리는 우리를 추가 할 수 있습들을 함께 새로운 배열입니다.

PS> $first + $secondZeroOneTwoThree

플러스 같+=

우리는 새로 만들 수 있습 배열에 항목을 추가 이를 다음과 같이 설명합니다:

$data = @( 'Zero' 'One' 'Two' 'Three')$data += 'four'

는 것을 기억하십시오를 사용할 때마+=는 당신이 중복을 만들고 새로운 배열입니다. 이것은 작은 데이터 세트에 대해서는 문제가되지 않지만 매우 저조한 규모입니다.,

파이프라인 할당

모든 파이프라인의 결과를 변수에 할당할 수 있습니다. Multipleitems 가 포함 된 경우 배열입니다.

$array = 1..5 | ForEach-Object { "ATX-SQL-$PSItem"}

일반적으로 파이프 라인을 사용하는 것을 생각할 때 일반적인 PowerShell one-liners 를 생각합니다. 우리는foreach()명령문 및 기타 루프로 파이프 라인을 복구 할 수 있습니다. 따라서 루프에서 anarray 에 항목을 추가하는 대신 항목을 파이프 라인에 놓을 수 있습니다.

$array = foreach ( $node in (1..5)){ "ATX-SQL-$node"}

배열 형식

기본적으로 배열에 PowerShell 으로 만들어집]유형입니다., 이를 통해 모든 유형의 객체 또는 값을 포함 할 수 있습니다. 이것은 모든 것이PSObject유형에서 상속되기 때문에 작동합니다.

강력하게 형식화 된 배열

비슷한 구문을 사용하여 모든 유형의 배열을 만들 수 있습니다. 강력하게 형식화 된 배열을 만들 때 지정된 유형의 값이나 객체 만 포함 할 수 있습니다.

ArrayList

항목을 추가하면 배열이 하나의 그것의 가장 큰 제한하지만,거기에 몇 가지 다른 collectionsthat 우리가 설정할 수 있습니다 그 문제가 해결될 수 있습니다.,

ArrayList는 일반적으로 첫 번째 중 하나는 일을 우리가 생각하의 필요로 할 때 우리는 배열 isfaster 니다. 그것은 우리가 필요로하는 모든 장소에서 객체 배열과 같은 역할을하지만 addingitems 를 빠르게 처리합니다.

다음은ArrayList를 만들고 그것에 항목을 추가하는 방법입니다.

$myarray = ::new()$myArray.Add('Value')

우리는이 유형을 얻기 위해.NET 으로 호출하고 있습니다. 이 경우 기본 생성자를 사용하고 있습니다.그것을 만듭니다. 그런 다음Add메서드를 호출하여 항목을 추가합니다.,

줄의 시작 부분에를 사용하는 이유는 반환 코드를 억제하는 것입니다. Some.NET 호출은이 작업을 수행하며 예기치 않은 출력을 만들 수 있습니다.

배열에 가지고있는 유일한 데이터가 strings 인 경우 usingStringBuilder 도 살펴보십시오. 그것은 거의 같은 일이지만 단지 끈을 다루기위한 몇 가지 방법이 있습니다. StringBuilder는 성능을 위해 특별히 설계되었습니다.

사람들이 배열에서ArrayList로 이동하는 것을 보는 것이 일반적입니다. 그러나 그것은 C#이 일반적인 지원을 한 시간에서 비롯된 것입니다., ArrayList에서 사용 되지 않는 지원에 대한 일반적인List

일반 List

일반 유형은 특별한 형식은 C#정의하는 일반화된 클래스고 사용자 지정 데이터 형식을 사용할 때 만들어집니다. 그래서 당신이 원하는 경우의 명부 숫자 또는 문자열을 definethat 당신이 원하는 목록의int또는string유형입니다.다음은 문자열에 대한 목록을 만드는 방법입니다.

$mylist = ]::new()

또는 숫자 목록.,

$mylist = ]::new()

캐스팅할 수 있는 기존하는 배열을 다음과 같은 목록이 없이 만드는 먼저 개체:

$mylist = ]@(1,2,3)

우리는 단축할 수 있는 구문으로는using namespace문서 PowerShell5 니다. using문은 스크립트의 첫 번째 줄이어야합니다. 네임 스페이스를 선언함으로써,PowerShelllets 당신이 그들을 참조 할 때 당신은 데이터 유형에서 그것을 떠나.이 문제를 해결하려면 다음 단계를 따르고 싶습니다.,

비슷한Add방법을 사용할 수 있습니다. ArrayList 와 달리 반환 값이 없습니다.Add메서드이므로voidit.

$myList.Add(10)

그리고 우리는 여전히 다른 배열과 같은 요소에 액세스 할 수 있습니다.

PS> $myList10

List

할 수 있습의 목록을 가지고 어떤 형식을 모르는 경우에는 유형의 객체를 사용할 수 있습니다]포함하는 그들.,

$list = ]::new()

제거()

ArrayList그리고 일반적인List모두 지원을 제거하는 항목에서 컬렉션입니다.

using namespace System.Collections.Generic$myList = ]@('Zero','One','Two','Three')$myList.Remove("Two")ZeroOneThree

값 유형으로 작업 할 때 목록에서 첫 번째 것을 제거합니다. 그 값을 계속 제거하기 위해 다시 andover 라고 부를 수 있습니다. 참조 유형이있는 경우 개체를 제공해야합니다.제거하고 싶습니다.,

]$drives = Get-PSDrive$drives.remove($drives)
$delete = $drives$drives.remove($delete)

제거 방법을 반환하는true경우를 찾을 수 있었다고 제거하는 항목에서 컬렉션입니다.

더 많은 컬렉션

는 다른 많은 컬렉션을 사용할 수 있는지만 이것은 좋은 일반적인 배열을 대체합니다.당신이 이러한 옵션의 더 많은에 대해 학습에 관심이 있다면,함께 넣어 thisGist thatMark 크라우스를 살펴.

기타 미묘한 차

이제는 모든 주요 기능을,여기에는 몇 가지 있습니다 내가 원하는 tomention 기 전에 나는 랩이다.,

사전 크기의 배열

일단 생성되면 배열의 크기를 변경할 수 없다고 언급했습니다. 우리는new($size)생성자로 호출하여 미리 결정된 크기의 배열을 만들 수 있습니다.

$data = ]::new(4)$data.count4

곱하여 배열

는 재미있는 곱 배열에 의해 정수입니다.

PS> $data = @('red','green','blue')PS> $data * 3redgreenblueredgreenblueredgreenblue

0 으로 초기화

일반적인 시나리오는 모든 0 으로 배열을 만들려는 것입니다. 당신이 단지 가지고 가려고한다면인테거,강하게 입력 된 정수 배열은 모든 0 으로 기본값이됩니다.,

PS> ]::new(4)0000

우리는 곱셈 트릭을 사용하여이 작업을 수행 할 수 있습니다.

PS> $data = @(0) * 4PS> $data0000

좋은 일에 대한 곱하는 모든 값을 사용할 수 있습니다.. 따라서255를 기본값으로 ratherhave 하면 좋은 방법이 될 것입니다.

PS> $data = @(255) * 4PS> $data255255255255

중첩 배열

배열 내의 배열이라고 중첩된 배열입니다. 나는 PowerShell 에서 이것들을 많이 사용하지는 않지만 다른 언어로 더 많이 사용했습니다. 데이터가 그리드와 같은 패턴에 맞을 때 배열의 배열을 사용하는 것을 고려하십시오.,다음은 2 차원 배열을 만들 수있는 두 가지 방법입니다.

$data = @(@(1,2,3),@(4,5,6),@(7,8,9))$data2 = @( @(1,2,3), @(4,5,6), @(7,8,9))

쉼표는 이러한 예에서 매우 중요합니다. 나는 일반 배열의 이전 예제를 주었다.쉼표가 선택 사항 인 다중 선. 다차원 배열의 경우는 그렇지 않습니다.

우리가 인덱스 표기법을 사용하는 방법은 이제 중첩 된 배열을 가지고 약간 변경됩니다. 위의$data를 사용하면 값 3 에 액세스하는 방법입니다.

PS> $outside = 0PS> $inside = 2PS> $data3

배열 중첩의 각 레벨에 대괄호 세트를 추가합니다., 괄호의 첫 번째 세트는 가장 바깥 쪽 배열에 대한 것입니다 그리고 당신은 거기에서 당신의 방법을 작동합니다.

쓰기 출력 NoEnumerate

PowerShell 은 배열을 풀거나 열거하는 것을 좋아합니다. 이것은 PowerShell 이 thepipeline 을 사용하는 방식의 핵심 측면이지만 그렇게되기를 원하지 않는 경우가 있습니다.

일반적으로 객체를Get-Member로 파이프하여 더 자세히 알아 봅니다. 내가 그것에 배열을 파이프 할 때,itgets unwrapped 및 Get-Member 는 실제 배열이 아닌 배열의 멤버를 봅니다.,

PS> $data = @('red','green','blue')PS> $data | Get-MemberTypeName: System.String...

배열의 언 랩을 방지하려면Write-Object -NoEnumerate를 사용할 수 있습니다.

PS> Write-Output -NoEnumerate $data | Get-MemberTypeName: System.Object...

나는 두 번째의 방법으로 더 많은 해킹의(그리고 피하려고 해킹이). Acomma 를 파이프하기 전에 배열 앞에 놓을 수 있습니다.

PS> ,$data | Get-MemberTypeName: System.Object...

배열을 반환

이것을 풀기의 배도할 때 또는 출력에서 값을 반환하는 함수. 출력을 변수에 할당하면 배열을 얻을 수 있으므로 일반적으로 문제가되지 않습니다.

캐치는 새로운 배열을 가지고 있다는 것입니다., 는 경우,문제가 사용할 수 있습니다Write-Output -NoEnumerate $array또는return ,$array합니다.

다른 것?