带前缀逗号的索引 0 的 $Array.IndexOf 错误
$Array.IndexOf wrong for index 0 with prefixed comma
我试图将变量的内容添加到数组中。不知道数组是否已经初始化,我使用了在要插入的数据前面加上逗号的技巧,以强制它作为数组进行评估。
似乎在执行此操作时,在您的实际项目前面使用逗号,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 非常通融,以至于有点误导。
我试图将变量的内容添加到数组中。不知道数组是否已经初始化,我使用了在要插入的数据前面加上逗号的技巧,以强制它作为数组进行评估。
似乎在执行此操作时,在您的实际项目前面使用逗号,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 非常通融,以至于有点误导。