Индексирование hastable - PullRequest
       10

Индексирование hastable

0 голосов
/ 20 марта 2012

У меня есть хеш-таблица, которую я добавляю при создании заданий со следующим кодом:

$jobtimer = @{}

1..10 | foreach {
        Start-Job -name $_ -ScriptBlock {
        Start-Sleep -Seconds (Get-Random -Minimum 456 -Maximum 46546520)
    }
    $jobtimer[$_] = [System.Diagnostics.Stopwatch]::StartNew()
}

(кстати, спасибо @mjolinor за помощь в этом !!)

Затем я перебираю свои работы и получаю время, отведенное на каждую работу. Но у меня проблемы с чтением значений массива. Если я непосредственно ссылаюсь на индекс, он работает:

$jobtimer[4].elapsed.totalseconds

Но если я попытаюсь просмотреть свои задания и вывести истекшее время, я ничего не получу:

get-job | foreach { 
       echo $jobtimer[$_.name].elapsed.totalseconds
    } 

Как пройти через цикл и ссылаться на мой массив?

Ответы [ 2 ]

3 голосов
/ 20 марта 2012

Это потому, что при настройке вы используете целое число, но для получения вы используете строку (имя задания является строкой, поэтому задания будут иметь имена типа "1", "2" и т. Д., А не 1, 2.

Либо сделать ниже при настройке:

$jobtimer["$_"] = [System.Diagnostics.Stopwatch]::StartNew()

Или сделать ниже при получении:

$jobtimer[[int]$_.name]
2 голосов
/ 20 марта 2012

Добавить приведение от строки к int в доступе к массиву:

get-job | foreach { $jobtimer[[int]$_.name] }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...