powershell 两个数组的成对枚举[duplicate]

ctzwtxfj  于 2022-12-04  发布在  Shell
关注(0)|答案(2)|浏览(119)

此问题在此处已有答案

Powershell foreach regarding multiple collections(1个答案)
Display multiple array values in list in Powershell(2个答案)
16天前关闭。
我有2个阵列:我需要在foreach中对它们进行排序以修改1个文件。
1个数组,其数据库名称如下所示:

$dbs = ['Honda', 'Toyota', 'BMW', 'Opel']

第二个数组,其大小如下所示:

$dbsSize = ['123', '300', '222', '143']

我可以在foreach中对名字排序

foreach ($db in $dbs){
  # some logic..
}

如何对同一个foreach中的第二个数组进行排序,以便在同一个循环中使用它
就像这样:

foreach ($db in $dbs) {
  # some logic with $db
  # and here I need some logic with $dbsSize 
}

而是像$dbs一样整理$dbsSize,因为我需要这样的结果:

Honda
123

Toyota
300

等等。
是否需要创建另一个循环?

polhcujo

polhcujo1#

在我看来,你有两个数组,其中的索引决定了一个数组中的哪个元素属于另一个数组中的元素。
我们还不清楚您是如何创建它们的,以及为什么您没有首先创建一个同时具有这两个属性的对象数组,但是您仍然可以这样做:

$dbs     = 'Honda', 'Toyota', 'BMW', 'Opel'
$dbsSize = '123', '300', '222', '143'

$result = for($i = 0; $i -lt [math]::Max($dbs.Count, $dbsSize.Count); $i++) {
    [PsCustomObject]@{
        Car  = $dbs[$i]
        Size = $dbsSize[$i]
    }
}

# sort the items on 'Car' for instance
$result = $result | Sort-Object Car

# show on screen
$result

# save to structured CSV file you can open in Excel
$result | Export-Csv -Path 'X:\Somewhere\cars.csv' -UseCulture -NoTypeInformation

使用上述示例时,屏幕上的结果如下所示

Car    Size
---    ----
BMW    222 
Honda  123 
Opel   143 
Toyota 300
anauzrmj

anauzrmj2#

我在你的代码中没有看到任何排序,我只看到枚举。看起来你想顺序枚举两个集合,在这种情况下,你需要使用for循环而不是foreach

$dbs = "['Honda', 'Toyota', 'BMW', 'Opel']" | ConvertFrom-Json
$dbsSize = "['123', '300', '222', '143']" | ConvertFrom-Json

for($i = 0; $i -lt [math]::Max($dbs.Count, $dbsSize.Count); $i++) {
    $dbs[$i]
    $dbsSize[$i]
}

如果你想使用一个foreach循环,并且两个集合都有相同的Length,那么你可以通过索引[ ]来获取其中一个集合的项(你选择哪个):

$i = 0
foreach($item in $dbs) {
    $item
    $dbsSize[$i++]
}

如果你想把两个数组合并到对象中,一个简单的方法是使用this answer中的function,这种情况下的用法是:

$dbs, $dbsSize | Join-Array -Columns Car, Size

相关问题