gpt4 book ai didi

arrays - PowerShell 数组字典?

转载 作者:行者123 更新时间:2023-12-02 22:14:56 24 4
gpt4 key购买 nike

在 VBScript 我可以做这样的事情

Set objDict = CreateObject("Scripting.Dictionary")
objDict.Add "item1", Array("data1", "data2")
objDict.Add "item2", Array("data3", "data4")

然后我可以使用这样的东西进行查找

dataArray = objDict.Item("item2")
elem1 = dataArray(0)
elem2 = dataArray(1)

结果是 elem1包含“data3”和 elem2包含“data4”

我不确定如何在 PowerShell 中复制它。有人帮忙吗?

最佳答案

字典在 PowerShell 中称为哈希表。 PowerShell刚出来的时候,微软也发布了VBScript-to-PowerShell Conversion Guide , 覆盖 dictionariesarrays除其他事项外。

您可以像这样定义哈希表(字典):

$d = @{
'foo' = 'something'
'bar' = 42
}

或者——例如,如果您需要动态填充哈希表——您可以创建一个空的哈希表并向其添加元素,如下所示:
$d = @{}
$d.Add('foo', 'something')
$d.Add('bar', 42)

或者像这样:
$d = @{}
$d['foo'] = 'something'
$d['bar'] = 42

通常我更喜欢后者,因为它会替换现有的键而不是抛出错误。
$d1 = @{}
$d1.Add('foo', 23)
$d1.Add('foo', 42) # can't add another key with same name => error

$d2 = @{}
$d2['foo'] = 23 # key is automatically added
$d2['foo'] = 42 # replaces value of existing key

数组被定义为一个简单的逗号分隔列表:
$a = 'a', 'b', 'c'

您也可以选择使用 array subexpression operator :
$a = @('a', 'b', 'c')

如果您需要数组结果,但不确定您的表达式将产生多少结果,这很有用。如果没有运算符,您将得到 $null 、单个值或数组,具体取决于表达式的结果。通过使用运算符,您总是会得到一个数组,其中包含零个、一个或多个元素。

数组和哈希表元素都可以通过 index operator 访问( [] ):
$d['foo']  # output: "something"
$a[1] # output: "b"

哈希表的元素也可以通过点符号访问:
$d.foo     # output: "something"

当然,您可以在哈希表中嵌套数组,反之亦然,就像在 VBScript 中一样。您的示例在 PowerShell 中看起来有点像这样
$dict = @{
'item1' = 'data1', 'data2'
'item2' = 'data3', 'data4'
}

$dataArray = $dict['item2']
$elem1 = $dataArray[0]
$elem2 = $dataArray[1]

不过,PowerShell 已经从其他脚本语言中学到了一两件事。例如,您可以将数组分配给变量列表,因此上述将数组元素分配给单个变量的操作可以简化为:
$elem1, $elem2 = $dict['item2']

如果数组的元素多于赋值左侧的变量数,则最后一个变量取数组的其余部分:
$x, $y, $z = 'a', 'b', 'c', 'd'
# $x -> 'a'
# $y -> 'b'
# $z -> @('c', 'd')

$x, $y, $z = 'a', 'b'
# $x -> 'a'
# $y -> 'b'
# $z -> $null

索引运算符允许访问多个元素:
$a = 'a', 'b', 'c', 'd', 'e'
$a[1,3,4] # output: "b", "d", "e"

以及数组末尾的元素:
$a = 'a', 'b', 'c', 'd', 'e'
$a[-1] # output: "e"
$a[-2] # output: "d"

range operator ( .. ) 允许您通过指定第一个和最后一个索引来从数组中获取切片。它产生一个从第一个操作数开始到第二个操作数结束的数字列表(例如 2..52,3,4,5 )。
$a = 'a', 'b', 'c', 'd', 'e'
$a[1..3] # equivalent to $a[1,2,3], output: "b", "c", "d"
$a[-1..-3] # equivalent to $a[-1,-2,-3], output: "e", "d", "c"

关于arrays - PowerShell 数组字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40185658/

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