arrays - 将阵列拆分为多个阵列性能
问题描述
我尝试使用 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"
解决方案
可以说最优雅的解决方案是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
推荐阅读
- java - JavaFX 工具已禁用
- flutter - Flutter Provider 闪屏
- call - 如何根据没有ifs的数字调用Nim中的函数?
- mysql - 有人可以说我的 ER 图是否错误?
- java - spring boot 使用 BcryptPasswordEncoder ,密码不匹配
- operator-overloading - 谁能告诉我这段代码是如何工作的?
- python - 没有'[]'我怎么能得到一个值
- cpanel - 如何自定义我的电子邮件发件人图标?
- c# - Xamarin C# 如何从 android CellSignalStrengthLte.Rsrp 获取
- javascript - Bootstrap-Select 刷新随机工作