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

如何用PowerShell结合正则实现带触发关键字的矩阵转置?

PowerShell 按关键字触发的矩阵转置(生成稀疏矩阵)

需求说明

输入为n×2格式的矩阵示例:

a 1
b 2
c 3
d 4
a 5
d 6
a 7
b 8
c 9

要求:每次出现关键字a时开启新的输出列,最终生成稀疏矩阵(缺失的位置留空)。

实现代码

# 读取输入数据(可替换为Get-Content读取文件,或通过管道输入)
$inputData = @'
a 1
b 2
c 3
d 4
a 5
d 6
a 7
b 8
c 9
'@ -split "`n" | ForEach-Object { $_.Trim() } | Where-Object { $_ }

# 初始化变量:存储所有列、当前列、所有唯一键
$columns = @()
$currentColumn = [ordered]@{}
$keys = @()

# 遍历每行数据,按关键字分割列
foreach ($line in $inputData) {
    $key, $value = $line -split '\s+', 2
    # 记录所有出现过的键,用于构建完整行
    if ($keys -notcontains $key) { $keys += $key }
    # 触发列切换:遇到关键字'a'时保存当前列,重置当前列
    if ($key -eq 'a') {
        if ($currentColumn.Count -gt 0) { $columns += $currentColumn }
        $currentColumn = [ordered]@{}
    }
    # 将当前键值对加入当前列
    $currentColumn[$key] = $value
}
# 处理最后一列数据
if ($currentColumn.Count -gt 0) { $columns += $currentColumn }

# 生成并输出稀疏矩阵
foreach ($key in $keys) {
    $rowCells = foreach ($col in $columns) {
        $col.ContainsKey($key) ? $col[$key] : ''
    }
    Write-Host ($rowCells -join "`t")
}

代码逻辑说明

  • 数据预处理:将输入文本拆分为行,去除空行和首尾空格,确保每行都是有效的键值对。
  • 列分组触发:通过匹配关键字a实现列分割,每次遇到a就将当前已收集的键值对作为新列存入集合,同时重置当前列开始收集下一组数据。
  • 稀疏矩阵构建:以所有出现过的键作为行标识,遍历每一列填充对应值,缺失的键对应位置留空,最终输出转置后的矩阵。

内容的提问来源于stack exchange,提问作者Nicholas Saunders

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 06:35:45