powershell - 从数组列表中删除一个 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)
哪个工作,但没有更简单的方法吗?我搜索了一下,发现了很多例子,但奇怪的是,在这个具体案例中没有。好吧,也许并不奇怪,因为它可能非常容易,所以这就是为什么没有人不得不问这个问题的原因?或者我的谷歌技能让我失望了......?
提前致谢。
解决方案
这一切都来自 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 以及基本上所有编程语言中如此基本且重要的概念,所以我建议您花几分钟时间阅读更多有关它的信息。
推荐阅读
- java - Java中数字识别的神经网络实现
- pandas - pandas 根据列值迭代行
- wordpress - WordPress,如何为同一页面使用动态网址?
- python - 熊猫 | 如何抓取转换为字符串的时差列的行
- python - 如何将python字节数组追加到C++
- php - update on change with livewire?
- java - 如何发布没有源的 JAR?
- android - 如何在不使用短信检索器的代码“getAppHash()”的情况下检测“离子电容器”中的短信
- excel - VBA 从 Excel 更新 Word 中的书签 - 只运行一次?
- windows - 有没有办法在不改变相对 zorder 的情况下设置窗口的焦点?