때 종종 PowerShell 스크립트를 작성하는,당신은 방법이 필요를 저장하는 설정의 항목입니다. 이를 달성하는 일반적인 방법 중 하나는 ArrayList 로 알려진 배열 또는 특정 유형입니다. 그러나 어쨌든 배열은 무엇입니까? 배열은 항목 모음을 저장하도록 설계된 데이터 구조입니다. 여기에는 동일한 항목과 다른 유형의 항목이 모두 포함될 수 있습니다.
배열은 많은 다른 프로그래밍 언어에서 사용되며 PowerShell 은 다르지 않습니다. 배열을 생성,조작 및 최적화하는 방법에는 여러 가지가 있습니다., 이 기사에서는 PowerShell 과 함께 적용 할 때 ArrayLists,배열 및 컬렉션뿐만 아니라 몇 가지 모범 사례에 대해 배우게됩니다.
테이블의 내용.
전제 조건/요구사항
때문에 당신과 함께 일하고 있 PowerShell 언어 자체가 없는 필수 환경 구성 요소. 당신은 단지 PowerShell 과 윈도우 PC 가 필요합니다. 특히
- Windows PowerShell3 이상
- .NET Framework4.5 이상
더 원한 끝이 같은가?, 체크인 나 개인적인 PowerShell 블로그:https://nkasco.com/FriendsOfATA
배열 생성 PowerShell
는 많은 다른 방법으로 배열을 만들과 함께 있습니다. 아래 그림과 같이 어떻게 든 처리해야하는 이름 목록이 있다고 가정 해 보겠습니다.
JohnSusieJimJohnnyCarrie
배열을 통해 쉼표로 구분한 요소
가장 기본적인 방법을 만들 수 있습 배열은 단순히 할당 알려진 입력을 쉼표로 분리하는 변수로는 아래와 같습니다.,
$BasicArray = "John", "Susie", "Jim", "Johnny", "Carrie"
를 실행하는 경우GetType()
사용할 수 있는 방법에는 모든 개체에 PowerShell,당신이 볼 수 있는 성공적으로 만들어진 배열로 표시된BaseType
속성을 아래와 같습니다.
PS51> $BasicArray.GetType()IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Object System.Array
를 사용하 Sub-식 Operator
을 만들 수도 있습 배열을 통해 PowerShell sub-식 연산자입니다. 이 개념은 일반적으로 배열에 추가 할 항목 수를 모를 때 사용됩니다. 결과는 생성 될 때 0 또는 많은 항목을 포함 할 수 있습니다.,
주의 아래$MyArray
라는 배열이 내부에 제로 요소로 생성되었습니다.
#Create an empty array with the sub-expression operatorPS51> $MyArray = @()PS51> $MyArray.count0
를 사용하는 범위 Operator
배열되지 않는 이관하여 저장할 문자열로 표시됩니다. 정수와 같은 다른 객체 유형으로 배열을 만들 수도 있습니다.
필요할 경우 정수 배열에서 순차적으로,당신이 걸릴 수 있습니다 바로 가기를 사용하여 범위를..
연산자입니다. 아래에서 한 줄의 코드로 정수 2~5 로 배열이 생성 된 것을 볼 수 있습니다.,
PS51> $NumberedArray = 2..5PS51> $NumberedArray2345
만들기 PowerShell ArrayList 집
를 사용하여 PowerShell ArrayList 한 방법으로 저장할 수 있는 항목의 목록과 함께 있습니다. ArrayList 클래스는 시스템의 일부입니다.이 유형의 새 객체를 생성하여.net.내의 컬렉션 네임 스페이스 그런 다음 ArrayList 내에 객체를 저장할 수 있습니다.
아래는 당신이 볼 수있는 당신을 명시적으로 만들 ArrayList 객체를 사용하는New-Object
cmdlet 또는 캐스팅하여 표준 배열을 ArrayList 개체입니다.,
통지를 하는 경우에는BaseType
은 개체는 반면 위의 예 BaseTypes 의 배열을 전시 하는 상속에서 클래스입니다. 궁극적으로 PowerShell 은.NET 유형 시스템에 대한 액세스를 제공하고 있습니다.
배열에 항목 추가
배열을 만들 때 생성시 모든 요소를 정의하거나 ad-hoc 을 추가 할 수 있습니다.
요소를 추가하려면 기존의 수집,사용할 수 있습니다+=
운영자 또는Add
방법입니다. 그러나 그들이 어떻게 운영되는지에 큰 차이가 있음을 알아라.,
경우를 만들 표준으로 배열@()
,당신이 사용하는+=
운영자 하지만 요소를 추가하는 배열을 사용하는Add
방법입니다. 이러한 방법에 차이가 있는+=
operator 실제로 파괴 기존 배열을 새로 생성된 새로운 항목입니다.
입증하기 위해,당신은 아래 참조할 수 있는IsFixedSize
속성에 대한 배열 또는 ArrayList 을 알고는 불변과는하지 않습니다.,
PS51> $BasicArray.IsFixedSizeTruePS51> $MyArrayList.IsFixedSizeFalse
기본 배열은 고정 된 크기의 모음이므로 수정할 수 없습니다.
고정 크기 인 배열을 사용하여Add()
메서드를 사용하려고하면 고정 크기로 인해 오류가 발생합니다. 아래에서 배열에 항목을 성공적으로 추가 할 수있는 몇 가지 예를 볼 수 있습니다.
#Does NOT work$BasicArray.Add("Nate")#Works$BasicArray += "Nate"$MyArrayList.Add("Nate")$MyArrayList += "Nate"
항목을 제거에서 배열
이제는 당신의 더 나은 이해가 있는 항목을 추가하는 방법을 배열에 의한 몇 가지 방법으로 항목을 제거할 수 있습니다에서 훌륭한 기능들을 가지고 있습니다.,기본 배열이 고정되어 있으므로 항목을 제거 할 수 없습니다. 대신 완전히 새로운 배열을 만들어야합니다. 예를 들어 포함하려는 요소와 만 일치하는 조건문을 만들어 배열에서 단일 요소를 제거 할 수 있습니다. 예가 아래에 나와 있습니다.
$NewBasicArray = $BasicArray -ne "Nate"
이후 ArrayList 지 않을 수정할 수 있습는 요소를 제거에서 사용하여 그들을Remove()
방법입니다. 이것은 항목을 자주 추가/제거하려는 경우 ArrayList 를 사용하면 이익을 얻을 수있는 시나리오 중 하나입니다.,
$MyArrayList.Remove("Nate")
를 검색하는 특정 항목에서 배열 또는 ArrayList
를 검색하는 특정 항목에서 배열 또는 배열을 사용할 수 있는 많은 다른 방법이 있습니다. PowerShell 의 다른 객체와 마찬가지로 단순히 객체를 호출하여 배열의 모든 요소에 액세스 할 수 있습니다.
PS51> $BasicArrayJohnSusieJimJohnnyCarrie
아마도 당신만을 검색하는 첫 번째 요소,배는 항상 있을 것이 있는 원산지의 0 을 대표하는 첫 번째 요소의 배열입니다. 배열의 첫 번째 요소를 검색하려면 아래 그림과 같이 괄호 안에 인덱스 번호를 지정하십시오.,
PS51> $BasicArrayJohn
반대로,참조할 수도 있 인덱스의 뒤를 사용하여 대시(부정적인 표시)를 호출 마지막 X 요소의 개수에서 배열입니다. 배열의 마지막 요소를 찾는 일반적인 방법은 아래 그림과 같이-1
를 사용하는 것입니다.
PS51> $BasicArrayCarrie
범위의 운전자가 당신에 대해 알게 위에도 사용될 수 있습을 검색하의 개체 배열해 다음과 같은 메소드를 호출하는 요소입니다. 의 당신이$BasicArray
배열에서 처음 네 이름을 검색 할 가정 해 봅시다.,
아래에서 처음 네 요소를 반환하는 인덱스 0-3 의 범위를 지정할 수 있습니다.
PS51> $BasicArrayJohnSusieJimJohnny
배열 최적화 PowerShell
이제 당신은 좋은 기반을 만드는 방법의 조작,배열하는 한 사용해야 합니까? 이에 답하기 위해Measure-Command
cmdlet 으로 몇 가지 예를 살펴 보겠습니다. 를 사용하는Measure-Command
cmdlet,당신은 더 나은 방법에 대해 이해 명령어를 복용하는 프로세스 요소로 그들은 아래로 통과 파이프 라인에 있습니다.,일반적으로 말하자면,작은 객체 컬렉션이있는 경우 배열을 조작하는 방법과 많은 차이를 느끼지 못할 가능성이 큽니다. 당신이 개체의 큰 컬렉션이있는 경우 그러나,최적의 결과를 달성하기 위해 차이를 이해하는 것이 중요하다.
적용하자는 무슨을에서 배운 것은 이전 섹션의 차이에 대해+=
고 사용하는Add()
방법으로 반복의 50,000 항목입니다.
먼저 아래 그림과 같이 빈 배열과 빈 ArrayList 를 만듭니다.,
PS51> $MyArray = @()PS51> $MyArrayList = @()
다음으로,채워 50,000 요소 각각의 컬렉션에 사용하는 범위의 운전자와 foreach 루프로 아래와 같습니다.
@(0..50000).foreach({$MyArray += $_})@(0..50000).foreach({$MyArrayList.Add($_)})
마지막으로,포장 명령을 표현하고 전달하는 표현을Measure-Command
합니다. Measure-Command
로 표현식을 실행하면 각 프로세스가 실제로 실행하는 데 걸리는 시간을 볼 수 있습니다.
에서 유지하는 마음으로 당신이 배웠기 전에,
+=
실제로 만드는 새로운 배열이 아닌 추가하면 고정된 하나입니다.,그 결과는 다음과 같습니다. 거의 60 초 대 139 밀리 초!보시다시피 고정 크기 배열을 사용하는 것보다 큰 컬렉션에 ArrayList 를 활용하는 것이 훨씬 빠릅니다.이것이 기본적인 예이지만 코드가 처리하는 동안 수행하는 작업을 이해하는 것이 중요하다는 점을 강조합니다. 제대로 이해하지 못하면 사용자 경험이 좋지 않을 수 있습니다.,경우에 당신이 어떤 기존는 스크립트를 사용 혜택을 누릴 수 ArrayList 보다는 오히려 배 이상 현저히 지장이 있다고 환상적인 기회를 만들어 야간 개선!
추가 읽기
- 비교 배열 PowerShell
- 을 만드는 방법을 배열 성능을 위해서 PowerShell(MCPmag)
더 원한 끝이 같은가? 내 개인 PowerShell 블로그를 확인하십시오:https://nkasco.com/FriendsOfATA.나는 이것을 할 수 없다.