小编Mat*_*ald的帖子

如果 pscustomobject 已存在,则防止将其添加到数组中

我觉得很愚蠢,我无法弄清楚这一点,但假设我有一个包含 pscustomobjects 的数组。以令人难以置信的高水平来看以下示例:

$arr = @()
$obj1 = [pscustomobject]@{prop1="bob";prop2="dude";prop3="awesome"}
$obj2 = [pscustomobject]@{prop1="bob";prop2="dude";prop3="awesome"}

$arr += $obj1
Run Code Online (Sandbox Code Playgroud)

在本例中,$obj1 和 $obj2 具有完全相同的项目/属性。如何测试 $testarr 是否包含 $obj1 的属性以避免将 $obj2 添加到其中?

请注意,上面是一个粗略的例子。pscustomobjects 是从数据集动态创建的并添加到数组中,但我想避免添加重复项。

我理解以下返回 true,但我完全期望任何给定的单个属性都有重复项。因此,我需要将整个 pscustomobject 和所有属性一起比较以获得唯一性。

$arr.Name -Contains 'Bob' #returns true

附带问题...为什么 $obj1 和 $obj2 本身不被视为相等?我认为这是因为它们在技术上是不同的对象,只是具有相同的值,但我不明白为什么会这样,但是两个不同的变量只有一个字符串测试是相同的。

$obj1 -eq $obj2  #returns false
$str1 = "test"
$str2 = "test"
$str1 -eq $str2  #returns true
Run Code Online (Sandbox Code Playgroud)

arrays powershell comparison compare pscustomobject

5
推荐指数
1
解决办法
805
查看次数

具有意外结果的 HashTable 枚举

这可能是一个愚蠢的问题,所以请友善,哈哈。我正试图集中精力思考我刚刚遇到的事情。

第一的

我有一个可以使用以下内容枚举的哈希表:

$ht = [hashtable]@{"Key1"="Value1";"Key2"="Value2"}
$ht.GetEnumerator()

Name                           Value
----                           -----
Key1                           Value1
Key2                           Value2
Run Code Online (Sandbox Code Playgroud)

如果我将其存储到一个变量中,则它仅在该变量的一次调用中存在。

$KeyPairs = $ht.GetEnumerator()
$KeyPairs

Name                           Value
----                           -----
Key1                           Value1
Key2                           Value2

$KeyPairs
# Nothing is returned as if $KeyPairs lost its value
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我理解为什么会这样吗?

第二

通常,对于集合,我有时想要针对单个项目进行测试(例如查看一个实例的属性),我可以使用 Select-Object 或通过索引:

$array = @("Value1","Value2")
$array | select -first 1
Value1

$array[0]
Value1
Run Code Online (Sandbox Code Playgroud)

哈希表枚举器似乎只支持 Select-Option,而不支持索引。

$ht = [hashtable]@{"Key1"="Value1";"Key2"="Value2"}
$ht.GetEnumerator() | Select -first 1
$ht.GetEnumerator() | Select -first 1

Name                           Value
----                           -----
Key1                           Value1


($ht.GetEnumerator() | measure).count
2 …
Run Code Online (Sandbox Code Playgroud)

powershell enumeration hashtable enumerator

3
推荐指数
2
解决办法
78
查看次数