繁体   English   中英

Powershell 将两个数组的元素组合在一起

[英]Powershell combine the elements of two arrays into one another

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

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

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

结果如下:

0
4
8
1
5
2

但是我怎样才能将它们复制到另一个给我这样的输出:

0
1
4
5
8
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

尽管 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()

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

这个考虑到数组中不同的大小并将它们交错,直到一个数组用完项目。 然后添加较大数组中的其余项目,而不添加较小数组中的“幽灵”项目。

$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

希望有帮助,

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

这是 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM