首页 > 解决方案 > 从数组列表中删除一个 hastable

问题描述

好吧,我确实遇到了一个简单的(?)问题:我无法从 ArrayList 中删除给定的哈希表:

$testarraylist = New-Object System.Collections.ArrayList
$testarraylist.Add(1)
$testarraylist.Add(2)
$testarraylist.Add(3)
$testarraylist.Add(4)
$testarraylist.Add(@{1=1})
$testarraylist.Add(@{2=2})
$testarraylist.Add(@{3=3})
$testarraylist.Add(5)
$testarraylist.Add(6)
$testarraylist.Add(7)

我可以删除简单的“列表”元素,但我无法删除哈希表之一

$testarraylist.remove(x)

我找到我的唯一方法是使用

$testarraylist.removeat(4)

哪个工作,但没有更简单的方法吗?我搜索了一下,发现了很多例子,但奇怪的是,在这个具体案例中没有。好吧,也许并不奇怪,因为它可能非常容易,所以这就是为什么没有人不得不问这个问题的原因?或者我的谷歌技能让我失望了......?

提前致谢。

标签: powershell

解决方案


这一切都来自 ArrayList 将如何查找您要删除的对象。如果您再次查看 .NET 规范,数字等System.Int32值类型,但集合等System.Collections.Hashtable引用类型

基本上,这意味着,值类型总是“按值”传递,但对于引用类型,只传递对该实例的“引用”。

您可以尝试一下,所以1 -eq 1,因为两者具有相同的值,但是 @{1=1} -ne @{1=1},因为它们是两个独立的实例,因此是两个不同的引用。

所以,你要做的就是首先将原始实例的引用存储在一个变量中:

$h = @{1=1}
$testarraylist.Add($h)
$testarraylist.Remove($h)

因为这是 .NET 以及基本上所有编程语言中如此基本且重要的概念,所以我建议您花几分钟时间阅读更多有关它的信息。


推荐阅读