Powershell将两个阵列的元素相互组合

时间:2018-10-06 06:29:02

标签: arrays powershell

我想通过从每个数组中一个接一个地挑选元素来加入两个数组。而不是将它们合并或简单合并

我知道如何在第一个数组中添加第二个数组,如下所示:

$array1 = (0,2,4)
$array2 = (1,3,5)
$array1 += $array2
$array1

结果如下:

0
2
4
1
3
5

但是我如何才能将它们相互复制,从而得到如下输出结果:

0
1
2
3
4
5

请注意,我不想合并它们,然后对列表进行排序。元素需要保持相同的顺序。将如何实现?

5 个答案:

答案 0 :(得分:2)

尝试这样的事情

$array1 = (0,2,4)
$array2 = (1,3,5)

$MaxLen=[Math]::Max($array1.Length, $array2.Length)

$Result=@()

for ($i = 0; $i -lt $MaxLen; $i++)
{ 
    $Result+=$array1[$i]
    $Result+=$array2[$i]
}

$Result

答案 1 :(得分:1)

尽管Esperento57为您提供了一个完美的工作解决方案,但我的想法是,这也将允许使用长度不同的数组。如果要合并的数组很大,它会使用System.Collections.ArrayList从数组中添加值以获得更好的性能。

$array1 = (0,2,4)
$array2 = (1,3,5,6,7,8)

$len1 = $array1.Length
$len2 = $array2.Length
$maxLength = [Math]::Max($len1, $len2)

$listResult = New-Object System.Collections.ArrayList
for ($i = 0; $i -lt $maxLength; $i++) {
    if ($i -lt $len1) { [void] $listResult.Add($array1[$i]) }
    if ($i -lt $len2) { [void] $listResult.Add($array2[$i]) }
}

$listResult.ToArray()

答案 2 :(得分:1)

这是另一种方法。 [咧嘴]

此数组考虑了数组中不同的大小,并将它们交错直到一个数组用完所有项目。然后,将添加较大数组中的其余项,而不会从较小数组中添加“重影”项。

$array1 = @(0,2,4)
$array2 = @(5,7,9,11)

$InterleavedArray = [System.Collections.Generic.List[int]]::new()

$UpperBound = [math]::Max($array1.GetUpperBound(0), $array2.GetUpperBound(0))

foreach ($Index in 0..$UpperBound)
    {
    if ($Index -le $array1.GetUpperBound(0))
        {
        $InterleavedArray.Add($array1[$Index])
        }
    if ($Index -le $array2.GetUpperBound(0))
        {
        $InterleavedArray.Add($array2[$Index])
        }
    }

$InterleavedArray

输出...

0
5
2
7
4
9
11

希望有帮助,

答案 3 :(得分:0)

如果您希望元素保持相同的顺序,只需执行$array3 = $array1 + $array2。如果您想对其进行排序,请执行$array3 = ($array1 + $array2) | sort

答案 4 :(得分:0)

这里是Theos答案的略微修改版本。 看起来更干净,更快:

$array1 = (0,2,4)
$array2 = (1,3,5,6,7,8)

$len1 = $array1.Length
$len2 = $array2.Length
$maxIndex = [Math]::Max($len1, $len2)-1

$arrayResult = @()
$arrayResult = foreach ($i in 0..$maxIndex) {
    if ($i -lt $len1) { $array1[$i] }
    if ($i -lt $len2) { $array2[$i] }
}
$arrayResult