我想通过从每个数组中一个接一个地挑选元素来加入两个数组。而不是将它们合并或简单合并
我知道如何在第一个数组中添加第二个数组,如下所示:
$array1 = (0,2,4)
$array2 = (1,3,5)
$array1 += $array2
$array1
结果如下:
0
2
4
1
3
5
但是我如何才能将它们相互复制,从而得到如下输出结果:
0
1
2
3
4
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