цикл foreach для сложного словаря неверен - PullRequest
4 голосов
/ 23 марта 2012

Я использую Windows 7 и PowerGUI Script Editor для написания ps1.Вот часть моих кодов:

#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!
    }
}

Здесь очень странно: почему Dic_CountsSingle не KeyValuePair, а точно так же как Dic_Counts ??

Спасиботебе очень нравится!

Ответы [ 3 ]

10 голосов
/ 23 марта 2012

Используйте

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

То же самое относится и к хеш-таблицам в PowerShell, так что это не особенно удивительно.

7 голосов
/ 23 марта 2012

Я делаю это так:

$Dic_Counts.keys | %{ $Dic_Counts[$_]  }
0 голосов
/ 23 марта 2012

Я думаю, что это сломалось здесь:

Foreach($Dic_CountsSingle in $Dic_Counts) 

Этот цикл foreach ожидает массив в качестве второго аргумента.$ Dic_Counts - это хеш-таблица, поэтому у нее нет индекса.Теперь мне интересно, будет ли упорядоченная хеш-таблица работать в цикле foreach.У него есть индекс.

Нет.Foreach также не будет перечислять упорядоченную хеш-таблицу.Должен сделать это сам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...