배열은 대부분의 프로그래밍 언어의 기본 언어 기능입니다. 그것들은 가치 또는 객체의 모음이므로 피하기가 어렵습니다. 배열과 그들이 제공해야하는 모든 것을 자세히 살펴 보겠습니다.
- 페이지 색인
- 배열이란 무엇입니까?,경기
- 모 eq
- 배열을 추가
- 플러스 같+=
- 파이프라인 할당
- 강력한 형식의 배열
- ArrayList
- 일반 List
- List
- 제거()
- 더 많은 컬렉션
- Pre-이즈 배열
- 곱하여 배열
- 초기화와 0
- 중첩 배열
- Write–출력 NoEnumerate
- 배열을 반환
배열이란 무엇입니까?
I am going 을 시작으로 기본적인 기술 설명의 무엇을 배열은 어떻게 사용하는 대부분에 의해 프로그래밍 언어가기 전에 내가로 이동 다른 방법으로 PowerShell 을 사용합니다.
배열은 여러 항목의 컬렉션 역할을하는 데이터 구조입니다. 배열을 반복하거나 인덱스를 사용하여 개별 항목에 액세스 할 수 있습니다. 배열은 각 값이 다른 값 바로 옆에 저장되는 순차적 인 메모리 청크로 생성됩니다.
우리가 갈 때 나는 그 세부 사항들 각각을 만질 것이다.,
기본 사용법
기 때문에 배열하는 등 기본적인 기능의 PowerShell,거기에 간단한 구문을 위해 그들과 함께 작업에 PowerShell.
배열을 만들과 함께@()
빈 배열을 사용하여 만들 수 있습@()
PS> $data = @() PS> $data.count 0
우리는 할 수 있습 배열을 만들고 그것은 씨앗으로 값은 단지 그들을 배치하여@()
괄호 안에 표시됩니다.
PS> $data = @('Zero','One','Two','Three') PS> $data.count 4 PS> $data Zero One Two Three
이 배열에 있는 4 개의 제품이 있습니다. 우리는$data
변수를 호출 할 때,우리는 우리의 항목의 목록을 참조하십시오., 그것이 문자열의 배열이라면,우리는 문자열 당 하나의 줄을 가질 것입니다.
우리는 여러 줄에 배열을 선언 할 수 있습니다. 이 경우 쉼표는 선택 사항이며 일반적으로 제외됩니다.
$data = @( 'Zero' 'One' 'Two' 'Three' )
좋아하 선언을 내는 배열에 여러 줄 같습니다. 여러 항목이있을 때 읽기가 더 쉬워 질뿐만 아니라 소스 제어를 사용할 때 이전 버전과 비교하기가 더 쉽습니다.,
기타 구문
일반적으로@()
는 배열을 만드는 구문이지만 쉼표로 구분 된 목록은 대부분 작동합니다.
$data = 'Zero','One','Two','Three'
쓰기-출력을 만들 배열
하나의 멋진 속 작은 언급 할 가치가 사용할 수 있는Write-Output
을 빠르게 만들 문자열에 console.매개 변수가 문자열을 허용 할 때 문자열 주위에 따옴표를 넣을 필요가 없으므로 편리합니다., 나는 스크립트에서 이것을하지 않을 것이지만 콘솔에서 공정한 게임이다.
항목 액세스
이제 항목이있는 배열이 있으므로 해당 항목에 액세스하고 업데이트 할 수 있습니다.
오프셋
개별 항목에 액세스하려면 0 에서 시작하는 오프셋 값으로 대괄호를 사용합니다. 이것은 우리가 어떻게의 첫 번째 항목에서 우리의 배열
PS> $data = 'Zero','One','Two','Three' PS> $data Zero
는 이유는 우리가 사용하여 제기 때문에 여기에 첫 번째 항목이의 시작 부분에 목록을 그래서 우리가 사용하는 오프셋의 0 품목이 있습니다.더 보기, 두 번째 항목으로 이동하려면 첫 번째 항목을 건너 뛰려면 1 의 오프셋을 사용해야합니다.
PS> $data One
이라는 뜻의 마지막 항목은 오프셋에서 3.
PS> $data Three
Index
이제 이유를 확인할 수 있습니다 내가 값을 내가 이것에 대한 예입니다. 나는 그것이 실제로 무엇이기 때문에 이것을 오프셋으로 소개했지만,이 오프셋은 더 일반적으로 인덱스라고 불립니다. 0
에서 시작하는 인덱스입니다. 이 기사의 나머지 부분에서는 오프셋을 인덱스라고 부릅니다.,
특별한 인덱스 트릭
대부분의 언어에서만 지정할 수 있습니다 하나의 숫자로 인덱스와 당신을 얻을 것이 하나의 항목이다. PowerShell 은 훨씬 유연합니다. 한 번에 여러 인덱스를 사용할 수 있습니다. 인덱스 목록을 제공하여 여러 항목을 선택할 수 있습니다.
PS> $data Zero Two Three
항목이 반환됩의 순서에 따라 인덱스를 제공합니다. 색인을 복제하면 두 번 모두 해당 항목을 얻게됩니다.,
PS> $data Three Zero Three
우리는 우리 지정할 수 있습니다 숫자의 순서에 내장 된..
연산자입니다.
PS> $data One Two Three
이 작품에서 역도.
PS> $data Three Two One
사용할 수 있습 negitive 인덱스 값이 오프셋에서 끝입니다. 따라서 목록의 마지막 항목이 필요한 경우-1
를 사용할 수 있습니다.,
PS> $data Three
경계
에서 대부분의 언어는 경우에,당신은에 액세스하려고 하는 항목의 색인되는 지난 배열의 끝에,당신은 당신을 얻을 것 어류의 유형 또는 예외입니다. PowerShell 은 조용히 당신에게 아무것도주지 않을 것입니다.
PS> $null -eq $data True
할 수 없으로 인덱스 null 배열
경우 변수를$null
와 당신이 시도하는 인덱스에 같이 배열 당신을 얻을 것이System.Management.Automation.RuntimeException
예외 메시지와 함께Cannot index into a null array
.,
PS> $empty = $null SP> $empty Error: Cannot index into a null array.
있는지 확인 하십시오 당신의 배열하지 않은$null
기 전에 당신은에 액세스하려고 하는 요소입니다.
Count
배열 및 기타 컬렉션가 횟수는 시설는 방법을 알려주는 많은 항목 배열에 있습니다.
PS> $data.count 4
PowerShell3.0 추가 수산 대부분의 개체입니다. 단일 객체를 가질 수 있으며1
의 수를 제공해야합니다.,
PS> $date = Get-Date PS> $date.count 1
도$null
가 횟수는 시설을 제외하고 그것은 반0
.
PS> $null.count 0
몇 가지 트랩 여기에는 다시 방문할 때 나는 커버에 대한 검사$null
또는 빈 배열에서 나중에 이 기사입니다.
하나의 오류로 끄기
배열은 인덱스 0 에서 시작하기 때문에 일반적인 프로그래밍 오류가 생성됩니다. 하나의 오류에 의한 오프는 두 가지 매우 일반적인 방법으로 도입 될 수 있습니다.,
첫 번째 정신적으로 생각하고 당신이 원하는 제 2 항목을 사용하여 인덱스의2
고 정말 세 번째 항목입니다. 또는 생각으로는4
항목 및 당신이 원하는 마지막 항목입니다,그래서 당신은 단지 사용의 크기를 액세스하는 마지막 항목입니다.
$data
PowerShell 은 완벽하게 행복하게 당신이 그렇게 정확히 무엇 항목에 존재하는 인덱스 4,$null
. 위에서 배운$data.count - 1
또는-1
를 사용해야합니다.,
PS> $data Three
이것은 어디에 사용할 수 있습니다-1
지수를 얻는 마지막 요소입니다.
PS> $data Three
리 데일리는 지적을 저는 우리가 사용할 수 있는$data.GetUpperBound(0)
을 얻을 최대 인덱스 번호입니다.
PS> $data.GetUpperBound(0) Three
두 번째 가장 일반적인 방법으로 반복할 때 목록 다만 멈추지 않고 바로 이 시간입니다. 나는 우리가for
루프를 사용하는 것에 대해 이야기 할 때 이것을 다시 방문 할 것이다.,
항목 업데이트
동일한 인덱스를 사용하여 배열의 기존 항목을 업데이트 할 수 있습니다. 이렇게하면 개별 항목을 업데이트 할 수있는 직접 액세스 할 수 있습니다.
$data = 'dos' $data = 'tres'
면 우리는 시도를 업데이트 항목에는 과거의 마지막 요소,그 다음 우리는 얻을Index was outside the bounds of the array.
오류가 있습니다.배열을 더 크게 만드는 방법에 대해 이야기 할 때 나중에 다시 방문하겠습니다.
반복
어떤 시점에서,당신은 당신을 걸어해야합니다 또는 반복하고 전체 목록 몇 가지 작업을 수행에 대한 각각의 항목에서 배열입니다.,
파이프 라인
배열과 PowerShell 파이프 라인은 서로를 의미합니다. 이것은 그 값을 통해 처리하는 가장 간단한 방법 중 하나입니다. 배열을 파이프 라인에 전달하면 배열 내부의 각 항목이 개별적으로 처리됩니다.
PS> $data = 'Zero','One','Two','Three' PS> $data | ForEach-Object {"Item: "} Item: Item: Item: Item:
지 않은 경우에는 본$PSItem
기 전에,단지 알고 있는 그와 같은 일을$_
. 둘 다 파이프 라인의 현재 객체를 나타 내기 때문에 둘 중 하나를 사용할 수 있습니다.,
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
메소드가 PowerShell4.0 에 추가되었습니다.
루
for
루프를 사용에 많은 대부분의 다른 언어 있지만 당신은 그것을 볼 수 없에서 많이 있습니다. 당신이 그것을 볼 때,그것은 종종 배열을 걷는 맥락에 있습니다.이 작업을 수행 할 때 가장 먼저하는 일은$index
를0
로 초기화하는 것입니다., 그런 다음$index
가$data.count
보다 작아야한다는 조건을 추가합니다. 마지막으로 루프 할 때마다 인덱스를1
로 늘려야한다고 지정합니다. 이 경우$index++
는$index = $index + 1
의 줄임말입니다.
for
루프를 사용할 때마다 조건에 특별한주의를 기울이십시오. 여기서$index -lt $data.count
를 사용했습니다. 그것은 당신의 논리에 하나의 오류에 의해 오프 얻을 약간 잘못 조건을 얻는 것은 매우 쉽습니다., 이 문제를 해결하는 데 도움이되는 몇 가지 방법이 있습니다. 그러면 결과가 너무 많거나 너무 적은 항목을 처리하게됩니다. 이것은 하나의 오류에 의해 떨어져 고전이다.
스위치 루프
이것은 하나하는 것은 매우 쉽습니다. Switch 문에 배열을 제공하면 배열의 각 항목에서 일치합니다.
$data = 'Zero','One','Two','Three' switch( $data ) { 'One' { 'Tock' } 'Three' { 'Tock' } Default { 'Tick' } }
이것은 생산이 출력:
Tick Tock Tick Tock
의 많은 멋진 같은 것들이 우리가 할 수 있는 스위치로 문입니다., 나는 이것에 전념 한 또 다른 기사를 가지고있다.
- 모든 것을 당신이 이제까지에 대해 알고 싶어 switch 문
값을 업데이트
경우 배열의 컬렉션을 문자열 또는 정수를(가치 종류),때때로 당신은 당신이 원하는 값을 업데이트 배열로 반복합니다. 위의 루프의 대부분은 값의 복사본을 보유하는 루프의 변수를 사용합니다. 해당 변수를 업데이트하면 배열의 원래 값이 업데이트되지 않습니다.
해당 문에 대한 예외는for
루프입니다., 배열을 걷고 그 안에 값을 업데이트하려는 경우for
루프가 찾고있는 것입니다.
for ( $index = 0; $index -lt $data.count; $index++ ) { $data = "Item: " -f $data }
이 예는 value 를 사용하여 지하게 몇 가지 변화,다음 사용하는 동일 색인을 할당합니다.
객체의 배열
지금까지 배열에 배치 한 유일한 것은 값 유형이지만 배열에는 객체도 포함될 수 있습니다.
$data = @( @{FirstName='Kevin';LastName='Marquette'} @{FirstName='John'; LastName='Doe'} )
많은 cmdlet 반환 개체의 모음으로 배열을 지정할 때에 그들에게 변수입니다.,
$processList = Get-Process
의 모든 기본적인 기능을 우리는 이미 이야기에 대해 여전히 적용을 배열 개체의 몇 가지 정보가 있다는 지적 가치가있다.
속성 액세스
인덱스를 사용하여 값 유형과 마찬가지로 컬렉션의 개별 항목에 액세스 할 수 있습니다.
PS> $data FirstName LastName ----- ---- Kevin Marquette
우리는 할 수 있습 액세스 및 업데이트 속성을 직접 있습니다.,
PS> $data.FirstName Kevin PS> $data.FirstName = 'Jay' PS> $data FirstName LastName ----- ---- Jay Marquette
배열 속성
일반적으로 당신이 있을 열거하여 전체 목록은 다음과 같이 접근하는 모든 속성:
PS> $data | ForEach-Object {$_.LastName} Marquette Doe
또는Select-Object -ExpandProperty
합니다.
PS> $data | Select-Object -ExpandProperty LastName Marquette Doe
지만 PowerShell 우리를 제공하는 기능을 요청하는LastName
이 직접 있습니다. PowerShell 은 우리를 위해 그들 모두를 열거하고 우리에게 깨끗한 목록을 줄 것입니다.,
PS> $data.LastName Marquette Doe
열거 여전히 발생하지만 우리는 우리가 보이지 않는 복잡합니다.
어디에서-객체를 필터링
이것은Where-Object
에서 온 그래서 우리는 우리를 필터링할 수 있고 선택 우리가 무엇을 원하는 배열에 따라 객체의 속성.
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.
업체에서 루프
값으로 형식을 업데이트 할 수있는 유일한 방법은 배열을 사용하는 것에 대한 반복하기 때문에 우리가 알아야 할 인덱스 대체하는 값입니다. 참조 유형이기 때문에 객체에 더 많은 옵션이 있습니다., 여기에 빠른 예:
foreach($person in $data) { $person.FirstName = 'Kevin' }
루이 걷는 모든 개체$data
배열입니다. 객체는 참조 유형이므로$person
변수는 배열에 있는 동일한 객체를 참조합니다. 그래서 그것의 속성에 대한 업데이트는 원본을 업데이트합니다.이 방법으로 전체 객체를 대체 할 수는 없습니다. 에 할당하려고 하면 새로운 객체을$person
가변,당신은 당신 업데이트 변수를 참조하는 다른 뭔가가 더 이상 본래 개체에 배열입니다., 이 작동하지 않습니다처럼 당신이 기대하는 것:
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-4 PS> $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 가 나에게 지적한 영리한 트릭이 있습니다., 하려는 경우에는 가입없이 모든 것을 구분 기호,이렇게 하:
PS> $data = @(1,2,3,4) PS> $data -join $null 1234
사용할 수 있는-join
배열로 매개 변수는 없는 접두어. 이 예제를 살펴보면 내가 말하는 것을 알 수 있습니다.
PS> $data = @(1,2,3,4) PS> -join $data 1234
바꾸기와 분할
다른 연산자는 다음과 같-replace
및-split
실행에 각 품목에서 배열입니다. 나는이 방법으로 그들을 사용한 적이 있다고 말할 수는 없지만 여기에 예가 있습니다.,
PS> $data = @('ATX-SQL-01','ATX-SQL-02','ATX-SQL-03') PS> $data -replace 'ATX','LAX' LAX-SQL-01 LAX-SQL-02 LAX-SQL-03
-담
-contains
연산자를 확인할 수 있는 배열의 값을 보이 포함된 경우에는 지정한 값입니다.
PS> $data = @('red','green','blue') PS> $data -contains 'green' True
-in
때는 단일 값이 있는지를 확인과 일치하는 여러 가지 중 하나 값을 사용할 수 있습니다-in
연산자입니다. 값은 왼쪽에 있고 배열은 작업의 오른쪽에 있습니다.,
PS> $data = @('red','green','blue') PS> 'green' -in $data True
이 비싼 얻을 수 있습니다면 큰 것입니다. 4-5 개 이상의 값을 확인하는 경우 정규식 패턴을 자주 사용합니다.예를 들어,배열이 복잡해지면 배열이 복잡해질 수 있습니다. 배열이 왼쪽에있을 때 모든 항목이 비교됩니다. True
를 반환하는 대신 일치하는 객체를 반환합니다.,
PS> $data = @('red','green','blue') PS> $data -eq 'green' green
할 때 사용하는-ne
연산자,우리는 모든 값들은 동일하지 않은 우리의 값입니다.
PS> $data = @('red','green','blue') PS> $data -ne 'green' red blue
사용하는 경우에는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-01 ATX-SQL-01
할 때 사용하는-match
단일값이 특별한 변수를$Matches
얻으로 채워집합니다. 배열이 이런 식으로 처리되는 경우는 아닙니다.
우리는Select-String
와 동일한 접근법을 취할 수 있습니다.,
$servers | Select-String SQL
I 에서 가까이 보Select-String
,-match
및$matches
변수에서 또 다른 포스트라는 많은 방법을 사용하 regex.
$null 또는 빈
$null
또는 빈 배열에 대한 테스트는 까다로울 수 있습니다. 다음은 배열이있는 일반적인 트랩입니다.한눈에,이 진술은 작동해야하는 것처럼 보입니다.
if ( $array -eq $null) { 'Array is $null' }
하지만 난 그냥 갔는 방법을-eq
각 품목을 검사합에서 배열입니다., 그래서 우리가 할 수 있습의 배열을 가지고 몇 가지 항목으로 단일$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' }
$null
배열은 동일하지 않은 것으로 빈 배열입니다. 배열이 있다는 것을 알고 있다면 그 안에있는 객체의 수를 확인하십시오., 배열이$null
이면 카운트는0
가됩니다.
if ( $array.count -gt 0 ) { 'Array is not empty' }
가 하나 더 많은 함정을 조심해 여기에. 사용할 수 있습니다count
경우에도 하나의 객체지 않는 한,해당 개체PSCustomObject
. 이것은 PowerShell6.1 에서 수정 된 버그입니다. 그것은 좋은 소식이지만,많은 사람들이 여전히 5.1 에 있고 그것을 조심해야합니다.PowerShell5 를 계속 사용중인 경우.,1,정확한 카운트를 얻기 위해 카운트를 확인하기 전에 배열에서 객체를 래핑 할 수 있습니다.
if ( @($array).count -gt 0 ) { 'Array is not empty' }
을 완벽하게 안전한 사용에 대한 확인$null
,다음을 확인합니다.
if ( $null -ne $array -and @($array).count -gt 0 ) { 'Array is not empty' }
모 eq
나는 최근에 누군가가 요구하는 방법을 확인하는 모든 값 배열을 지정한 값입니다. Reddit user/u/bis 에는 잘못된 값을 확인한 다음 결과를 뒤집는이 영리한 솔루션이있었습니다.,
$results = Test-Something if ( -not ( $results -ne 'Passed') ) { 'All results a Passed' }
추가 배열
이 시점에서,당신은 궁금해하기 시작했는 방법에 항목을 추가하는 훌륭한 기능들을 가지고 있습니다. 빠른 대답은 당신이 할 수 없다는 것입니다.배열은 메모리에 고정 된 크기입니다. 필요하신 경우에는 그것을 성장 또는 추가 단일 항목을 한 다음,그것을 만들어야 하는 새로운 배열로 복사한 모든 값을 통해서 배열입니다. 이것은 비싸고 많은 작업처럼 들리지만 PowerShell 은 새로운 배열을 만드는 복잡성을 숨 깁니다.
배열 추가
배열과 함께 추가 연산자를 사용하여 새 배열을 만들 수 있습니다., 그래서 주어진 이러한 두 가지 배열
$first = @( 'Zero' 'One' ) $second = @( 'Two' 'Three' )
우리는 우리를 추가 할 수 있습들을 함께 새로운 배열입니다.
PS> $first + $second Zero One Two Three
플러스 같+=
우리는 새로 만들 수 있습 배열에 항목을 추가 이를 다음과 같이 설명합니다:
$data = @( 'Zero' 'One' 'Two' 'Three' ) $data += 'four'
는 것을 기억하십시오를 사용할 때마+=
는 당신이 중복을 만들고 새로운 배열입니다. 이것은 작은 데이터 세트의 경우 문제가되지 않지만 매우 저조한 규모입니다.,
파이프라인 할당
모든 파이프라인의 결과를 변수에 할당할 수 있습니다. 여러 항목이 포함 된 경우 배열이됩니다.
$array = 1..5 | ForEach-Object { "ATX-SQL-$PSItem" }
정상적으로 우리가 생각할 때 사용하는 파이프라인,우리는 생각의 일반적인 PowerShell 한. 우리는foreach()
명령문 및 기타 루프로 파이프 라인을 활용할 수 있습니다. 따라서 루프의 배열에 항목을 추가하는 대신 파이프 라인에 항목을 드롭 할 수 있습니다.,
$array = foreach ( $node in (1..5)) { "ATX-SQL-$node" }
에 의해 할당하는 결과가의foreach
변수에,우리는 모든 개체들을 배열입니다.
배열 유형
기본적으로 PowerShell 의 배열은]
유형으로 생성됩니다. 이를 통해 모든 유형의 객체 또는 값을 포함 할 수 있습니다. 이것은 모든 것이PSObject
유형에서 상속되기 때문에 작동합니다.
강력하게 형식화 된 배열
비슷한 구문을 사용하여 모든 유형의 배열을 만들 수 있습니다., 강력하게 형식화 된 배열을 만들 때 지정된 유형의 값이나 객체 만 포함 할 수 있습니다.
ArrayList
항목을 추가하면 배열이 하나의 그것의 가장 큰 제한 사항만 있는 다른 몇 가지 컬렉션은 우리는 우리 차례 수 있는 이 문제를 해결합니다.
ArrayList
는 일반적으로 첫 번째 중 하나는 일을 우리가 생각하가 필요로 할 때 우리는 배열하는 것은 빠르게 작동합니다. 그것은 우리가 필요로하는 모든 장소에서 객체 배열과 같은 역할을하지만 항목을 빠르게 추가하는 것을 처리합니다.
다음은ArrayList
를 만들고 그것에 항목을 추가하는 방법입니다.,이 유형을 얻기 위해.Net 으로 호출하고 있습니다. 이 경우 우리는 그것을 만들기 위해 기본 생성자를 사용하고 있습니다. 그런 다음Add
메서드를 호출하여 항목을 추가합니다.
줄의 시작 부분에를 사용하는 이유는 반환 코드를 억제하는 것입니다. 일부.Net 호출은이 작업을 수행하며 예기치 않은 출력을 만들 수 있습니다.
배열에 가지고있는 유일한 데이터가 string 인 경우 StringBuilder 사용도 살펴보십시오., 그것은 거의 같은 일이지만 단지 문자열을 다루기위한 몇 가지 방법이 있습니다. StringBuilder
는 성능을 위해 특별히 설계되었습니다.
- 연결할 문자열을 사용하여 StringBuilder
그것은 정말 일반적인 사람들이 이동하여ArrayList
에서 배열입니다. 그러나 그것은 C#이 일반적인 지원을하지 않은 시간에서 온다., ArrayList
파일을 읽을 수 없도록 해야 합니다.에 대한 지원이 일반적인List
일반 List
일반 유형은 특별한 형식은 C#에서의 일반화된 클래스고 사용자 지정 데이터 형식을 사용할 때에 만들어집니다. 그래서 당신이 원하는 경우의 명부 숫자 또는 문자열을 정의할 목록의int
또는string
유형입니다.다음은 문자열에 대한 목록을 만드는 방법입니다.이 경우 숫자 목록 또는 숫자 목록 목록을 사용할 수 있습니다.,
$mylist = ]::new()
캐스팅할 수 있는 기존하는 배열을 다음과 같은 목록이 없이 만드는 먼저 개체:
$mylist = ]@(1,2,3)
우리는 단축할 수 있는 구문에 조금using namespace
문서 PowerShell5 니다. using
문은 스크립트의 첫 번째 줄이어야합니다. 네임 스페이스를 선언하면 PowerShell 을 참조 할 때 데이터 유형에서 벗어나게 할 것입니다.,
using namespace System.Collections.Generic $myList = ]@(1,2,3)
이것은List
훨씬 더 사용할 수 있습니다.
비슷한Add
방법을 사용할 수 있습니다. ArrayList 와 달리Add
메서드에는 반환 값이 없으므로void
it.다른 배열과 마찬가지로 요소에 여전히 액세스 할 수 있습니다.,
PS> $myList 10
List
할 수 있습의 목록을 가지고 어떤 형식을 모르는 경우에는 유형의 객체를 사용할 수 있습니다]
포함하는 그들.
$list = ]::new()
제거()
ArrayList
그리고 일반적인List
모두 지원을 제거하는 항목에서 컬렉션입니다.
using namespace System.Collections.Generic $myList = ]@('Zero','One','Two','Three') $myList.Remove("Two") Zero One Three
값 형식으로 작업 하는 경우,이를 제거한 첫 번째 목록에서 하나., 그 값을 계속 제거하기 위해 반복해서 호출 할 수 있습니다. 참조 유형이있는 경우 제거하려는 개체를 제공해야합니다.
]$drives = Get-PSDrive $drives.remove($drives)
$delete = $drives $drives.remove($delete)
제거 방법으면 true 를 반환할 수 있었을 찾고 제거하는 항목에서 컬렉션입니다.
더 많은 컬렉션
는 다른 많은 컬렉션을 사용할 수 있는지만 이것은 좋은 일반적인 배열을 대체합니다., 이러한 옵션에 대해 더 많이 배우는 데 관심이 있다면 Mark Kraus 가 함께 넣은이 요지를 살펴보십시오.
기타 미묘한 차
이제는 모든 주요 기능을,여기에 몇 가지고 싶었다는 것을 언급하기 전에 나는 랩이다.
사전 크기의 배열
일단 생성되면 배열의 크기를 변경할 수 없다고 언급했습니다. 우리는new($size)
생성자로 호출하여 미리 결정된 크기의 배열을 만들 수 있습니다.,
$data = ]::new(4) $data.count 4
곱하여 배열
는 재미있는 곱 배열에 의해 정수입니다.
PS> $data = @('red','green','blue') PS> $data * 3 red green blue red green blue red green blue
초기화와 0
일반적인 시나리오를 만들려는 배열에 모두와 함께합니다. 정수 만 가질 예정이라면 강력하게 형식화 된 정수 배열은 모든 0 으로 기본 설정됩니다.이 작업을 수행하기 위해 곱셈 트릭을 사용할 수 있습니다.,곱셈 트릭의 좋은 점은 모든 값을 사용할 수 있다는 것입니다. 따라서255
를 기본값으로 사용하는 것이 좋습니다.
PS> $data = @(255) * 4 PS> $data 255 255 255 255
중첩 배열
배열 내의 배열이라고 중첩된 배열입니다. 나는 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 = 0 PS> $inside = 2 PS> $data 3
추가 설정을 위한 부류의 각 수준의 배열 중첩이 있습니다., 괄호의 첫 번째 세트는 외부 대부분의 배열을위한 것입니다 그리고 당신은 거기에서 당신의 방법을 작동합니다.
쓰기 출력 NoEnumerate
PowerShell 은 배열을 풀거나 열거하는 것을 좋아합니다. 이것은 PowerShell 이 파이프 라인을 사용하는 방식의 핵심 측면이지만 그렇게되기를 원하지 않는 경우가 있습니다.
일반적으로 객체를Get-Member
로 파이프하여 더 자세히 알아 봅니다. 배열을 파이프하면 래핑되지 않고 Get-Member 는 실제 배열이 아닌 배열의 멤버를 봅니다.,
PS> $data = @('red','green','blue') PS> $data | Get-Member TypeName: System.String ...
는 것을 방지하는 것을 풀의 배열을 사용할 수 있습니다Write-Object -NoEnumerate
.이 작업을 수행하는 두 번째 방법은 해킹이 더 많은 것입니다(그리고 이와 같은 해킹을 피하려고합니다). 배열 앞에 쉼표를 파이프하기 전에 배치할 수 있습니다.
PS> ,$data | Get-Member TypeName: System.Object ...
배열을 반환
이 유엔-포장의 배열도할 때 또는 출력에서 값을 반환하는 함수., 출력을 변수에 할당하면 배열을 얻을 수 있으므로 일반적으로 문제가되지 않습니다.캐치는 새로운 배열을 가질 것이라는 것입니다. 는 경우,문제가 사용할 수 있습니다Write-Output -NoEnumerate $array
또는return ,$array
합니다.
다른 것?나는 이것이 모두 받아 들여야 할 것이 많다는 것을 안다. 나의 희망은 당신이 뭔가를 배우 이 문서에서 읽을 때마다 당신은 그것과는 것이 될 수 있는 좋은 기준을 위해 당신을 위해 오랜 시간이 올 것입니다., 당신이 도움이 될,다른 사람과 공유하시기 바랍니다 당신이 생각하는 것이 가치를 얻을니다.
여기에서 해시 테이블에 대해 쓴 비슷한 게시물을 확인하는 것이 좋습니다.피>