如何比较PowerShell中的结构

时间:2014-07-08 14:07:53

标签: powershell struct

PowerShell存在问题。我使用遗留应用程序,他们使用结构。我想使用其他东西,但这需要大量的工作,因为结构在代码库中是无处不在。

问题是我有一个包含ALOT结构的数组。结构包含两个字符串,我们称之为stringA和stringB。只有stringA才能确定两个结构是否相互相等。我想删除重复项。通常我通过将对象抛出到HashSet中或者通过执行代码示例中的操作来完成此操作。我如何使用结构?我想比较一下stringA。

# This is how I retrieve the array
[myStruct[]]$myArray = SomeMethodThatGivesMeAnArray

# The way I remove duplicates when working with string arrays.
$myArray = $myArray | Select -Uniq

# The struct 
add-type @"
public struct myStruct {
    public string stringA;
    public string stringB;
}
"@

1 个答案:

答案 0 :(得分:3)

您仍然可以使用类似于字符串数组重复删除的代码。您可以将Sort-Object cmdlet与-Unique-Property参数一起使用:

$uniqueArray = $myArray | Sort-Object -Unique -Property StringA

这确实在排序数组的成本方面增加了一些开销,但它会返回由stringA的唯一值组成的结构数组。请注意,对于给定的myStruct.stringA值,这将返回原始数组中第一个遇到的结构。

试一试

[Namespace.myStruct[]]$myArray = @([Namespace.myStruct]@{stringA="a";stringB="b"},[Namespace.myStruct]@{stringA="a";stringB="FFF"},[Namespace.myStruct]@{stringA="b";stringB="b"},[Namespace.myStruct]@{stringA="b";stringB="Other String"})
$uniqueArray = $myArray | Sort-Object -Unique -Property StringA

$myArray将成立:

stringA  stringB                                                                                   
-------  -------                                                                                   
a        b                                                                                         
a        FFF                                                                                       
b        b                                                                                         
b        Other String 

$uniqueArray将成立:

stringA stringB
------- -------
a       b      
b       b