2013-04-17 101 views
2

我有3個對象數組。他們是這樣的:組合鏈接對象的數組

  • $arr1$arr2:對象與像(IDfilenamesize等)的特性。
  • $arrlink:具有屬性的對象(如file1ID,file2ID,misc)。此鏈接上述對象中的2個

我需要做的是將它們組合成一個數組,以便我可以將它寫入CSV。 3需要鏈接:File1IDFile2ID到其他2個陣列中的ID列。我需要能夠選擇我想要的屬性。這裏有一個例子

$arr1[0] = {1,"c:\filename1.txt",1000....} 
$arr1[1] = {2,"c:\filename2.txt",2000....} 

$arrlink[0] = {1,2,"aaaa") 

所需的結果:

newarray[0] = {"c:\filename1.txt", "c:\filename2.txt", "aaaa"} 

我知道我可以通過的foreach和做到這一點,但不知道是否有一個簡單/更直接的方式。

當然,每個陣列中有許多項目,但它們都以1對1關係進行鏈接。

+0

將數組(帶有對象)轉換爲以fileID爲鍵的散列表。然後foreach你的鏈接數組,並使用「鏈接對象」中的ID從哈希表中提取你需要的值。 –

回答

1

我用這個結束了。如果我修改底層對象(只要我離開鏈接字段),它可以節省大量的輸入並且不需要修改。

$arrOutput = @() 

foreach($a in $arrMatch) 
    { 
    $objOut = New-Object PsObject 

    $a.psobject.properties | % { $objOut | Add-Member -MemberType $_.MemberType -Name $_.Name -Value $_.Value} 
    $arrS1[$a.file1].psobject.properties | % { $objOut | Add-Member -MemberType $_.MemberType -Name ($_.Name + "_1") -Value $_.Value} 
    $arrS2[$a.file2].psobject.properties | % { $objOut | Add-Member -MemberType $_.MemberType -Name ($_.Name + "_2") -Value $_.Value} 
    $arrOutput+= $objOut 
    }