Powershell использует значения одного массива в качестве заголовков для другого массива - PullRequest
1 голос
/ 07 мая 2019

У меня есть два массива в Powershell:

$headings = ['h1', 'h2']
$values = [3, 4]

Гарантируется, что оба массива имеют одинаковую длину.Как я могу создать массив, где значения $headings становятся заголовками массива $values?

Я хочу иметь возможность сделать что-то вроде этого:

$result['h2'] #should return 4

Обновление: Массивы $headings и $values имеют тип System.Array.

Ответы [ 2 ]

2 голосов
/ 07 мая 2019

Как указано выше, вам понадобится PowerShell хеш-таблица .Кстати, массив в PowerShell определяется через @(), для получения дополнительной информации см. about_arrays .

$headings = @('h1', 'h2')
$values = @(3, 4)

$combined = @{ }

   if ($headings.Count -eq $values.Count) {
      for ($i = 0; $i -lt $headings.Count; $i++) {
         $combined[$headings[$i]] = $values[$i]
      }
}
else {
   Write-Error "Lengths of arrays are not the same"
}

$combined

Сброс содержимого combined возвращает:

$combined

Name                           Value
----                           -----
h2                             4
h1                             3
1 голос
/ 07 мая 2019

Попробуйте что-то вроде этого:

$hash = [ordered]@{ h1 = 3; h2 = 4}
$hash["h1"] # -- Will give you 3

## Next Approach
$headings = @('h1', 'h2') #array
$values = @(3, 4) #array

If($headings.Length -match $values.Length) 
{
    For($i=0;$i -lt $headings.Length; $i++) 
    {
      #Formulate your Hashtable here like the above and then you would be able to pick it up
      #something like this in hashtable variable $headings[$i] = $values[$i]
    }

}

PS: Я просто даю вам логический старт и помогаю вам с хеш-таблицей. Код на ваше усмотрение.

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