2012-03-23 5 views
4

Windows 7 및 PowerGUI Script Editor를 사용하여 ps1을 작성하고 있습니다. 여기 내 코드의 일부입니다 :복잡한 사전에 대한 foreach 루프가 올바르지 않습니다.

#In global scope 
$Type_Trans = "System.Collections.Generic.Dictionary[System.String,PSObject]" 
$Type_Farms = "System.Collections.Generic.Dictionary[System.Int32,$Type_Trans]" 

$Dic_Counts = New-Object $Type_Farms 

#...puts some data in $Dic_Counts here... 
#It is no problem with printing out it in console 

#Now call the function below 
Write-Data $Dic_Counts 

Function Write-Data 
{ 
    param(
     $Dic_Counts 
    ) 

    Foreach($Dic_CountsSingle in $Dic_Counts) 
    { 
     Write-DataSingle $Dic_CountsSingle #THIS LINE! 
    } 
} 

그것은 여기 매우 이상하다 왜하지 않는 KeyValuePairDic_CountsSingle이지만, 그냥 같은 Dic_Counts로이다 ??

대단히 감사합니다!

답변

10

사용

foreach ($Dic_CountsSingle in $DicCounts.GetEnumerator()) 

그것은 너무, PowerShell의 해시 테이블에 같은, 그래서 특히 놀라운 일이 아니다.

+0

당신이 설명 할 수 있습니까? –

0

은 나는 여기에 고장 생각 : 그것은 두 번째 인수의로

Foreach($Dic_CountsSingle in $Dic_Counts) 

그 foreach 루프 배열을 기대하고있다. $ Dic_Counts는 해시 테이블이므로 인덱스가 없습니다. 이제 순서가 지정된 해시 테이블이 foreach 루프에서 작동하는지 궁금합니다. 색인이 있습니다.

아니요. Foreach는 순서가 지정된 해시 테이블도 열거하지 않습니다. 너 스스로해야 해.

+0

글쎄, 정확하게 PowerShell이 ​​자체적으로 (foreach 또는 파이프 라인에서) 반복 할 것인지 궁금합니다. 'System.Collections.Generic.List '에 대해서도 그렇습니다. 확실히 어레이는 아니지만 사전이나 해시 테이블에 의해 구현되지 않은 배열과 공통적으로 존재하는 정의 인터페이스는 없습니다 . – Joey

7

나는 이런 식으로 그것을 할 :이 왜

$Dic_Counts.keys | %{ $Dic_Counts[$_] } 
+0

와우,이 문법은 무엇입니까? "%"? – bychance

+2

@bychance foreach-object의 별명입니다. – manojlds

관련 문제