gpt4 book ai didi

powershell - 为什么 Powershell 会展平我的阵列?

转载 作者:行者123 更新时间:2023-12-03 13:57:40 25 4
gpt4 key购买 nike

$arrays = @();
$array = @();
$string = 'one|two|three';
$array = ($string -split '\|');
$arrays += $array;
$arrays[0][0]

我希望 $arrays 是一个二维数组,第一个元素是对 $array 的引用。因此,$arrays[0][0] 将包含字符串“one”。

相反,PoSh 似乎将 $arrays 扁平化为包含元素“一”、“二”和“三”的单个列表。即使我在追加操作中将 @() 数组构造函数放在 $array 周围也是如此。

向我的追加添加一个额外的元素让我接近,但是我将在 $arrays 中有空元素:

$arrays = @();
$array = @();
$string = 'one|two|three';
$array = ($string -split '\|');
$arrays += $array, '';
$arrays[0][0]

最佳答案

将 PowerShell 的 + 运算符与作为 LHS 的数组一起考虑为连接数组,即附加 RHS 到 LHS 数组[1]:

# Note: , has higher precedence than +, so this is the same as: ((1, 2) + (3, 4)).Count
> (1, 2 + 3, 4).Count # Same as: (1, 2, 3, 4).Count
4

even if I put the @() array constructor around $array

,是数组构造操作符。

@()数组子表达式运算符 - 其目的是确保封闭命令的输出成为数组除非它已经是一个
换句话说:@(1, 2)无操作,因为1, 2 已经 em> 一个数组。

因此,正如您所发现的,使用 , 构造一个嵌套数组是解决方案:

> (1, 2 + , (3, 4)).Count
3
  • , (3, 4) 将数组 3, 4 包装在一个单元素数组中。

  • + 然后将该数组的每个元素(包装的 3, 4 数组中的唯一元素)添加到 LHS。


[1] 我们不要忘记 .NET 数组是一种不可变数据结构, 所以真正发生的是,在幕后,PowerShell 构造了一个数组。

关于powershell - 为什么 Powershell 会展平我的阵列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45047798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com