我需要確定陣列的所有元素是否完全相同。我希望它也能很好地處理所有資料型別,物件/字串/整數/等。
在 PowerShell 中是否有一種簡單的方法可以做到這一點?
function Test-ArrayElementsEqual {
[CmdletBinding()]
param (
[Parameter(Mandatory,Position = 0,ValueFromPipeline)]
[object]
$Array,
)
$test = $null
foreach ($item in $Array) {
if(!$test){
$test = $item
continue
}
if($test -ne $item){
return $false
}
}
return $true
}
這就是我現在所擁有的,但我有一種感覺,它是一個破碎的實作,并且有一些更優雅的東西。
任何幫助都會很棒。
uj5u.com熱心網友回復:
正如在我的評論中一樣,對于簡單的比較,您可以使用Lee_Dailey在他的評論中提出的內容,僅添加一個可以通過使用.GetType()方法來完成的型別比較。
這function將回傳$true,如果所有的元件具有相同的型別和相同的值的和將回傳index是相同型別的不或者不具有相同的值的第一個元素和預期值/型別。
function Test-ArrayElementsEqual {
[CmdletBinding()]
param (
[Parameter(Mandatory)]
$InputObject
)
begin
{
$refVal = $InputObject[0]
$refType = $refVal.GetType()
$index = 0
}
process
{
foreach($element in $InputObject)
{
if($element -isnot $refType)
{
"Different Type at Position $index. Expected Type was {0}." -f $refType.FullName
return
}
if($element -ne $refVal)
{
"Different Value at Position $index. Expected Value was $refVal."
return
}
$index
}
$true
}
}
測驗示例
$arr1 = 123, 123, '123'
$arr2 = 123, 345, 123
$arr3 = 'test', 'test', 'test'
結果
PS /> Test-ArrayElementsEqual $arr1
Different Type at Position 2. Expected Type was System.Int32.
PS /> Test-ArrayElementsEqual $arr2
Different Value at Position 1. Expected Value was 123.
PS /> Test-ArrayElementsEqual $arr3
True
如果您正在尋找一種比較不同物件是否相同的方法,您可能會找到有關此問題答案的有用資訊:如果已存在,則防止將 pscustomobject 添加到陣列
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/362650.html
