如何在foreach循环中同步处理两个关联数组并对应排序?
问题:如何在同一个foreach循环中同步处理两个对应数组?
我有两个数组,需要在foreach循环中处理它们来修改文件:
- 数据库名称数组示例:
$dbs = ['Honda', 'Toyota', 'BMW', 'Opel']
- 对应数据库大小的数组示例:
$dbsSize = ['123', '300', '222', '143']
目前我能通过如下foreach循环遍历数据库名称数组:
foreach ($db in $dbs){ # 一些逻辑.. }
请问如何在同一个foreach循环中让$dbsSize数组与$dbs数组保持对应顺序,从而能在循环中同时使用$db和对应的$dbsSize值?
期望实现的循环效果类似:
foreach ($db in $dbs) { # 使用$db的逻辑 # 这里需要使用对应$dbsSize的逻辑 }
最终要得到的对应结果示例:
Honda 123 Toyota 300
是否需要创建另一个循环?
解决方案
不需要额外创建循环,有几种实用方法可以实现同步遍历:
方法1:通过索引关联遍历
利用数组的索引来对应两个数组的元素,循环时同时取出索引匹配的内容:
for ($i = 0; $i -lt $dbs.Count; $i++) { $db = $dbs[$i] $size = $dbsSize[$i] # 执行你的逻辑,比如输出对应内容 Write-Output $db Write-Output $size Write-Output "" }
方法2:合并为对象数组遍历
把两个数组的对应元素整合成自定义对象,再遍历这个对象数组,代码可读性更强:
# 合并两个数组为对象数组 $dbWithSize = for ($i = 0; $i -lt $dbs.Count; $i++) { [PSCustomObject]@{ Name = $dbs[$i] Size = $dbsSize[$i] } } # 遍历对象数组 foreach ($item in $dbWithSize) { # 直接调用对象属性 Write-Output $item.Name Write-Output $item.Size Write-Output "" }
方法3:使用Zip方法(PowerShell 5.1及以上版本)
PowerShell支持数组的Zip方法,可直接将两个数组合并为键值对集合:
foreach ($pair in $dbs.Zip($dbsSize, { $args })) { $db = $pair[0] $size = $pair[1] Write-Output $db Write-Output $size Write-Output "" }
内容的提问来源于stack exchange,提问作者Sergio Ramos
相关产品推荐
相关产品推荐

