2013-04-17 4 views
2

У меня есть 3 массива объектов. Они выглядят так:Объединение массивов объектов, которые связаны

  • $arr1, $arr2: объекты со свойствами, как (ID, filename, size и т.д.). (file1ID, file2ID, разное). Это связывает 2 из вышеуказанных объектов

Что мне нужно сделать, это объединить их в один массив, чтобы я мог записать его в CSV. Необходимо связать 3: File1ID и File2ID с колонкой ID в других 2 массивах. Мне нужно уметь выбирать, какие свойства я хочу. Вот пример

$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 как ключ. Затем запустите свой связной массив и используйте идентификатор в «объекте ссылки», чтобы извлечь нужные значения из хеш-таблицы. –

ответ

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 
    } 
Смежные вопросы