Подтвердить что ты не робот

Создать массив, хэш-таблицу и словарь?

Каков правильный способ создания массива, хеш-таблицы и словаря?

$array = [System.Collections.ArrayList]@()

$array.GetType() возвращает ArrayList, OK.

$hashtable = [System.Collections.Hashtable]

$hashtable.GetType() возвращает RuntimeType, не в порядке.

$dictionary = ? 

Как создать словарь, используя этот способ .NET?

В чем разница между словарем и хеш-таблицей? Я не уверен, когда я должен использовать один из них.

4b9b3361

Ответ 1

Правильный способ (т.е. способ PowerShell):

Массив:

> $a = @()
> $a.gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

Hashtable/Словарь:

> $h = @{}
> $h.gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Hashtable                                System.Object

Вышеупомянутое должно быть достаточным для большинства сценариев, подобных словарю, но если вы явно хотите тип из Systems.Collections.Generic, вы можете инициализировать, например:

> $d = New-Object 'system.collections.generic.dictionary[string,string]'
> $d.gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Dictionary`2                             System.Object

> $d["foo"] = "bar"
> $d | Format-Table -auto

Key   Value
---   -----
foo   bar

Ответ 2

Если вы хотите инициализировать массив, вы можете использовать следующий код:

$array = @()    # empty array
$array2 = @('one', 'two', 'three')   # array with 3 values

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

$hashtable = @{}   # empty hashtable
$hashtable2 = @{One='one'; Two='two';Three='three'}   # hashtable with 3 values

Hashtable и словарь в Powershell почти одинаковы, поэтому я предлагаю использовать хэш-таблицу практически во всех случаях (если вам не нужно что-то делать в .NET, где требуется словарь)