首页 > 解决方案 > 将阵列拆分为多个阵列性能

问题描述

我尝试使用 PowerShell 将以下数组拆分为多个较小的数组。但是逐行输出文本文件需要很多时间。还有其他方法可以提高性能吗?

原始数组($FRUITARRAY):

橙色,1,4,5,6,7,8
苹果,1,3,2,4,5
橙色,2,4,5,6,7,8
橙色,3,4,5,6,7,8
苹果,2,3,2,4,5
橙色,4,4,5,6,7,8
橙色,5,4,5,6,7,8
苹果,3,3,2,4,5
苹果,4,3,2,4,5

所需的输出数组:

$ORANGERRAY

橙色,1,4,5,6,7,8
橙色,2,4,5,6,7,8
橙色,3,4,5,6,7,8
橙色,4,4,5,6,7,8
橙色,5,4,5,6,7,8

$APPLEARRAY

苹果,1,3,2,4,5
苹果,2,3,2,4,5
苹果,3,3,2,4,5
苹果,4,3,2,4,5

代码:

$FRUITARRAY = Get-Content 'D:\work\fruit.txt'

for ($i=1; $i -lt $FRUITARRAY.Length; $i++) {
    if ($FRUITARRAY[$i].Split(',')[0].StartsWith('ORANGE')) {
        $FRUITARRAY[$i] | Out-File "D:\work\ORANGE.TXT" -Append
    }

    if ($FRUITARRAY[$i].Split(',')[0].StartsWith('APPLE')) {
        $FRUITARRAY[$i] | Out-File "D:\work\APPLE.TXT" -Append
    }
}

$ORANGEARRAY = Get-Content "D:\work\ORANGE.TXT"
$APPLEARRAY  = Get-Content "D:\work\APPLE.TXT"

标签: arrayspowershellsplit

解决方案


可以说最优雅的解决方案是Group-Object

$fruits = Get-Content 'D:\work\fruit.txt' | Group-Object { $_.Split(',')[0] }

$apples  = $fruits |
           Where-Object { $_.Name -eq 'apple' } |
           Select-Object -Expand Group
$oranges = $fruits |
           Where-Object { $_.Name -eq 'orange' } |
           Select-Object -Expand Group

推荐阅读