PowerShell: разница между обозначениями массива?

#arrays #powershell #powershell-2.0 #notation

#массивы #powershell #powershell-2.0 #обозначения

Вопрос:

Есть ли разница между этими двумя операторами создания массива? Итак, является ли знак «@» необязательным при создании массивов?

 $a = "This", "Is", "a", "cat"
$a.GetType()
$a | gm
$a = @("This", "Is", "a", "cat")
$a.GetType()
$a | gm
  

Ответ №1:

 $a = @() # declare an empty array.

$a = @(mysingleitem) # declare an array with a single element
  

В другом случае необязательно.

Комментарии:

1. Аналогично, если результаты выражения внутри оператора подвыражения массива равны нулю или одному элементу, то он все равно вернет массив длиной ноль или единицу соответственно. Например @(Get-WMIObject win32_logicalDisk) , from . about_Operators

Ответ №2:

Есть ли разница между этими двумя операторами создания массива?

Хотя я не уверен на 100% (это зависит от возможностей PowerShell), разница может заключаться в следующем: "This", "Is", "a", "cat" создает массив. @("This", "Is", "a", "cat") создает тот же массив, а затем применяет к нему оператор @() (очевидно, избыточная операция в данном конкретном случае).

Используя, например, этот профилировщик, мы можем видеть, что второе выражение выполняется довольно медленнее (14% или что-то в этом роде), так что мое предположение может быть правильным. В идеале интерпретатор кода PowerShell мог бы обрабатывать эти два выражения одинаково, но, вероятно, это не так.

См. Также раздел справки (конец, об операторах @() и , )

 help about_operators