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

PowerShell数组过滤:保留同用户下最长前缀匹配项

PowerShell数组过滤:按用户保留最长前缀路径项

解决方案代码

# 按用户分组筛选最长路径项
$result = $data | Group-Object By | ForEach-Object {
    $userFiles = $_.Group.File
    $_.Group | Where-Object {
        $currentPath = $_.File
        # 排除存在更长同前缀路径的项
        -not ($userFiles | Where-Object { $_ -ne $currentPath -and $_.StartsWith($currentPath) })
    }
}

# 格式化输出结果
$result | Format-Table By, Mode, File -AutoSize

逻辑说明

  1. 按用户分组:用Group-Object By将数据按By列分组,确保仅在同一用户的范围内处理路径关系,不同用户的项互不影响。
  2. 筛选最长路径:
    • 对每个用户组,先提取所有File路径到$userFiles变量。
    • 遍历组内每一项,检查当前路径是否是其他路径的前缀:如果存在不等于当前路径且以当前路径开头的项,说明当前路径是短前缀项,需要排除;反之则保留(即当前路径是最长的,没有更长的路径以它为前缀)。

针对示例数据的验证结果

  • user1组:creation\1. ABC是另外两个路径的前缀,被排除,保留creation\1. ABC\Invoice和creation\1. ABC\LIMITED。
  • user2组:edition\File是edition\File\DATA SHEETS的前缀,BCD是BCD\DATA的前缀,这两个短项被排除,保留两个最长路径。
  • user3组:仅有一个项,直接保留。

原有代码问题分析

你之前的循环仅遍历$data.file,没有按用户分组,且用Contains判断的是包含关系(而非前缀关系),逻辑上无法区分前缀层级和用户边界,所以达不到需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 00:47:13