【发布时间】:2016-02-07 19:42:23
【问题描述】:
我正在尝试测试某个条件是否适用于 PowerShell 中数组中的所有项目(类似于 LINQ 的 All 函数)。除了编写手动 for 循环之外,在 PowerShell 中执行此操作的“正确”方法是什么?
具体来说,here 是我试图从 C# 翻译的代码:
public static IEnumerable<string> FilterNamespaces(IEnumerable<string> namespaces)
=> namespaces
.Where(ns => namespaces
.Where(n => n != ns)
.All(n => !Regex.IsMatch(n, $@"{Regex.Escape(ns)}[\.\n]")))
.Distinct();
【问题讨论】:
-
@Matt Hm,有趣的想法。那么是这样的:
$filtered = $array -Match $pred; if ($filtered.Length -eq $array.Length)? -
看不到这些变量是什么......理论上是的。
-
您能否发布一个您正在测试真/假条件的项目的示例?
-
虽然这个问题有点偶然,但它有助于理解这段代码的作用:从命名空间列表中,它只返回共享路径中具有 最长 路径的那些父路径;例如,如果
System.Windows和System.Windows.Input都存在,则仅返回System.Windows.Input。我对正则表达式中的\n感到困惑,但是 - 最后不是\.吗?
标签: linq powershell