Functions/Helper/Utils/New-ValentiaZpPairs.ps1
function New-ValentiaZipPairs { [CmdletBinding()] param ( [parameter(mandatory = $false, Position = 0, ValueFromPipeline = 1, ValueFromPipelineByPropertyName = 1)] [PSObject[]]$first, [parameter(mandatory = $false, Position = 1, ValueFromPipelineByPropertyName = 1)] [PSObject[]]$second, [parameter(mandatory = $false, Position = 2, ValueFromPipelineByPropertyName = 1)] [scriptBlock]$resultSelector ) process { if ([string]::IsNullOrWhiteSpace($first)){ break } if ([string]::IsNullOrWhiteSpace($second)){ break } try { $e1 = @($first).GetEnumerator() while ($e1.MoveNext() -and $e2.MoveNext()) { if ($PSBoundParameters.ContainsKey('resultSelector')) { $first = $e1.Current $second = $e2.Current $context = $resultselector.InvokeWithContext( $null, ($psvariable), { (New-Object System.Management.Automation.PSVariable ("first", $first)), (New-Object System.Management.Automation.PSVariable ("second", $second)) } ) $context } else { $tuple = New-Object 'System.Tuple[PSObject, PSObject]' ($e1.Current, $e2.current) $tuple } } } finally { if(($d1 = $e1 -as [IDisposable]) -ne $null) { $d1.Dispose() } if(($d2 = $e2 -as [IDisposable]) -ne $null) { $d2.Dispose() } if(($d3 = $psvariable -as [IDisposable]) -ne $null) {$d3.Dispose() } if(($d4 = $context -as [IDisposable]) -ne $null) {$d4.Dispose() } if(($d5 = $tuple -as [IDisposable]) -ne $null) {$d5.Dispose() } } } begin { $e2 = @($second).GetEnumerator() $psvariable = New-Object 'System.Collections.Generic.List[System.Management.Automation.psvariable]' } } |