2013-01-25 63 views
1

由於比較對象不能採用通配符,我如何比較兩個數組的長度或內容不完全相同,但足夠類似於通配符集或正則表達式他們。比較兩個數組的內容相似

例子:

$form = "First Name","Last Name","Address","Phone","Nickname","Fax Number" 
$data = "First Name ","Last Name","Street Address","Phone number","",Fax" 

我可以比較陣列沒有做一堆的if語句和運營商?開關可能會更優雅,但我就是這樣希望能夠做到這一點在一行simlar這樣的:

Compare-Object ("*$form*) ("*$data*") 

,而不是像這樣:

for($x=0;$x -lt $form.Count;$x++) 
{ 
    [string]$xx = $x 
    if($form[$x] -like "*$data[$x]*" -or $data[$x] -like "*form[$x]*" -and $data[$x] -ne $null -and $form[$x] -ne $null) 
    { 
     $form[$x] 
     $data[$x] 
    } 
    elseif($form[$x] -eq $null -and $data[$x] -eq $null) 
    { 
     "Form index $xx and Data index $xx are null" 
    } 
    elseif($form[$x] -eq $null) 
    { 
     "Form index $xx is null" 
    } 
    elseif($data[$x] -eq $null) 
    { 
     "Data index $xx is null" 
    } 
    else 
    { 
     "Data index $xx and Form index $xx are not even close to the same" 
    } 
} 

回答

1

我懷疑你會能夠找到內置的已經具有您在示例代碼中列出的「智能」的內容。

您可以隨時讓自己的函數或cmdlet擁有「單行」能力,允許您重複調用它。或者作爲替代方案,您可以編寫自己的custom comparer

+0

是的,我很害怕這個。從來沒有創建過我自己的cmdlet,所以也許這會讓我值得一試它。謝謝。 –