У меня есть два массива объектов. Я хочу вставить соответствующий extraProperty в массив "car", если он найден. Может быть несколько дополнительных свойств или их нет. То есть, я хотел бы добавить, когда для соответствующего автомобиля был найден extraProperty, массив со списком найденных дополнительных свойств.
Каждый extraProperties состоит из объекта со следующими свойствами: Id, Name, Value.
Код:
param(
[Parameter(Mandatory=$false, Position=1, ValueFromPipeline=$false)]
[string]$Types,
[Parameter(Mandatory=$false, Position=2, ValueFromPipeline=$false)]
[string]$PathFile,
[Parameter(Mandatory=$false, Position=3, ValueFromPipeline=$false)]
[string]$PathPropertyFile
)
$profiles_list = Import-Csv $PathFile -Header Id, model, Type Delimiter ";"
$extraProperties_list = Import-Csv $PathPropertyFile -Header ProfileId,Name,Value -Delimiter ";" # Get-Content -Path $pathFile
foreach($p in $car_list) {
$Property = $property_list.Where({$_.Id -eq $p.Id}) | Select-Object -Property Name,Value
if(-Not (($null -eq $Property ) -And (@($Property ).Count -eq 0)) ) {
$p = $p | Add-Member -NotePropertyMembers @{Properties=$Property }
} else {
$p = $p | Add-Member -NotePropertyMembers @{Properties=@()}
}
}
Образец данных:
PropertyFile.csv
Id | Name | Value
504953 | Example1 | Value1
504953 | Example2 | Value2
504955 | Example3 | Value3
CarFiles.csv
Id | Model | Type
504953 | Model1 | 3
504954 | Model1 | 0
504955 | Model3 | 3
Проблема в том, что код не эффективен. Массив car достигает 200000 позиций, и где каждая позиция является объектом с несколькими свойствами, а массив свойств также достигает этих значений. Выполнение сценария занимает бесконечные часы.
Есть ли способ оптимизировать вставку нового свойства в массивы?