[英]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.