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;
}
"@
答案 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