#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