gpt4 book ai didi

powershell - $Array.IndexOf 对于带有前缀逗号的索引 0 是错误的

转载 作者:行者123 更新时间:2023-12-02 09:28:18 25 4
gpt4 key购买 nike

我试图将变量的内容添加到数组中。由于不知道数组是否已初始化,我使用了在要插入的数据前面添加逗号的技巧,以强制将其计算为数组。似乎在执行此操作时,在实际项目前使用逗号,indexof 方法不会为数组中的第一个项目提供正确的索引。

在下面的代码示例中,$a 显示了该问题,而 $b 工作得很好;唯一的区别是初始化 $a 时前面的逗号。

这是一个错误,还是我遗漏了什么?

PS C:\code> $a = (,4,5,6)
PS C:\code> $b = (4,5,6)
PS C:\code> $a
4
5
6
PS C:\code> $a.indexof(4)
-1
PS C:\code> $a.indexof(5)
1
PS C:\code> $a.indexof(6)
2
PS C:\code> $b
4
5
6
PS C:\code> $b.indexof(4)
0
PS C:\code> $b.indexof(5)
1
PS C:\code> $b.indexof(6)
2

自从出现问题后,我只是在变量前添加了 [array] 前缀,并去掉了前缀逗号,一切看起来都很好。我只是好奇发生了什么事。

最佳答案

这里发生的一些事情导致了误导性的结果。只需知道这种行为是预期的,

在第一个数组 $a 中,您创建了 3 个元素。第一个是 unary operator 。您实际上所做的是创建一个三元素数组,其中第一个元素本身就是一个元素的整数数组。 PowerShell 帮了你一个忙,展开数组,这就是为什么 $a$b 的输出在控制台中显示相同的原因。

PS M:\Scripts> $a = (,4,5,6)

PS M:\Scripts> $a[0].GetType().Fullname
System.Object[]

PS M:\Scripts> $a[1].GetType().Fullname
System.Int32

那么.IndexOf() method的原因没有找到元素4是因为它没有深入研究嵌套数组。

Searches for the specified object and returns the index of its first occurrence in a one-dimensional array.

根据定义,它似乎不搜索嵌套数组。

如果您需要考虑这一点,那么您可以使用 -is 运算符或仅检查类型。

PS M:\Scripts> $a | %{$_ -is [array]}
True
False
False

PS M:\Scripts> $a | %{$_.GetType().Fullname}
System.Object[]
System.Int32
System.Int32

重点是我在这里没有看到错误。只是 PowerShell 非常包容,以至于有点误导。

关于powershell - $Array.IndexOf 对于带有前缀逗号的索引 0 是错误的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35634391/

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