You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多维数组/哈希表当作数据库表执行SELECT-WHERE等查询?(PowerShell)

嘿,这个需求在PowerShell里完全能搞定,不用发愁!咱们可以利用PowerShell天生的对象处理能力,搭配Group-Object、Measure-Object这些内置cmdlet,把多维数组或哈希表当成“内存数据库”来实现类似SQL的查询、分组和汇总操作。我结合你的需求(按首字段分组、汇总SD开头的行)给你举几个实用的例子:

第一步:把原始数据转成PowerShell对象

不管你是从文件读取的行数据,还是现成的多维数组,先把它们转成自定义对象是最方便的——因为PowerShell对对象的筛选、分组操作特别顺手。比如假设你的原始数据是每行用逗号分隔的文本:

# 模拟从文件读取的原始数据(实际可以用 Get-Content 读取)
$rawData = @(
    "GroupA,10,20",
    "SD-001,5,15",
    "GroupA,30,40",
    "SD-002,8,12",
    "GroupB,15,25",
    "SD-001,7,13"
)

# 把每行拆分成字段,转成带属性的对象
$dataObjects = $rawData | ForEach-Object {
    $fields = $_ -split ','
    [PSCustomObject]@{
        GroupKey = $fields[0]  # 首字段作为分组键
        Num1     = [int]$fields[1]
        Num2     = [int]$fields[2]
    }
}

实现类似SQL的操作

1. 筛选(WHERE):只保留SD开头的行

就像SQL里的WHERE GroupKey LIKE 'SD%',用Where-Object就能轻松筛选:

$sdOnlyRows = $dataObjects | Where-Object { $_.GroupKey -match '^SD' }

2. 分组(GROUP BY)+ 汇总(SUM/COUNT)

按首字段分组,同时统计每组的行数(COUNT)和数值总和(SUM),等效于SQL的GROUP BY + 聚合函数:

# 全部分组的汇总
$fullSummary = $dataObjects | Group-Object -Property GroupKey | ForEach-Object {
    # 计算每组的Num1、Num2总和
    $sumNum1 = ($_.Group | Measure-Object -Property Num1 -Sum).Sum
    $sumNum2 = ($_.Group | Measure-Object -Property Num2 -Sum).Sum
    # 输出自定义汇总对象
    [PSCustomObject]@{
        GroupName = $_.Name
        EntryCount = $_.Count
        TotalNum1 = $sumNum1
        TotalNum2 = $sumNum2
    }
}

# 只汇总SD开头的分组(先筛选再分组)
$sdSummary = $sdOnlyRows | Group-Object -Property GroupKey | ForEach-Object {
    [PSCustomObject]@{
        SDCode = $_.Name
        TotalNum1 = ($_.Group | Measure-Object -Property Num1 -Sum).Sum
        TotalEntries = $_.Count
    }
}

3. 导出到汇总文件

最后把汇总结果导出成CSV格式(方便后续查看或处理):

# 导出全部分组汇总
$fullSummary | Export-Csv -Path "FullGroupSummary.csv" -NoTypeInformation -Encoding UTF8

# 导出SD分组汇总
$sdSummary | Export-Csv -Path "SDSummary.csv" -NoTypeInformation -Encoding UTF8

小贴士:如果原始数据是哈希表怎么办?

如果你的数据一开始就是哈希表结构,也可以先转成对象再处理:

# 模拟哈希表数据
$hashData = @{
    "GroupA" = @(10, 30)
    "SD-001" = @(5, 7)
    "GroupB" = @(15)
}

# 把哈希表转成对象
$hashObjects = $hashData.GetEnumerator() | ForEach-Object {
    [PSCustomObject]@{
        GroupKey = $_.Key
        Values = $_.Value
    }
}

# 然后同样可以做汇总
$hashSummary = $hashObjects | ForEach-Object {
    [PSCustomObject]@{
        GroupKey = $_.GroupKey
        TotalValue = ($_.Values | Measure-Object -Sum).Sum
        EntryCount = $_.Values.Count
    }
}

这些都是PowerShell原生的功能,不用额外装插件,你可以根据自己的实际数据结构调整字段名和逻辑,多试几次就能熟练啦!

内容的提问来源于stack exchange,提问作者Björn H. Sandvik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:23:10