【问题标题】:How to filter array in powershell如何在powershell中过滤数组
【发布时间】:2015-01-31 15:41:44
【问题描述】:

我在 Powershell 中有一个带有一些字符串的数组,例如

$StringArray = {"all_srv_inf", "all_srv_inf_vir", "all_srv_inf_vir_vmw", "all_srv_rol", "all_srv_rol_iis", "all_srv_rol_dc"}

我想过滤数组中的所有字符串,所以只剩下最独特的。

因此,在上面的示例中,我必须过滤“all_srv_inf”、“all_srv_inf_vir”和“all_srv_rol”,从而得到一个字符串数组,其中只有以下值:“all_srv_inf_vir_vmw”、“all_srv_rol_iis”和“all_srv_rol_dc”

列表实际上要长得多,那么过滤 Powershell 字符串数组的最有效方法是什么?

谢谢。

【问题讨论】:

  • 如果下面的回答对你有帮助,也请考虑点赞。

标签: arrays string powershell filter


【解决方案1】:

您的变量不包含实际数组,而是在调用时生成数组的脚本块。

有多种过滤字符串的方法,您可以在 SO 或 Google 上搜索此处找到。您可以使用Measure-Command { #your code } 尝试一些解决方案,看看需要多长时间并比较结果。

我的前两个想法是使用-notmatch-notcontains/-notin-notmatch 使用通常更快的正则表达式,所以我会从它开始。根据您输入的数据等,另一种解决方案可能对您有更好的效果,因此您应该尝试不同的方法并对其进行测量。

-notmatch 示例:

$StringArray = "all_srv_inf", "all_srv_inf_vir", "all_srv_inf_vir_vmw", "all_srv_rol", "all_srv_rol_iis", "all_srv_rol_dc"

#Build regex for items to exclude
$exclude = ('all_srv_inf', 'all_srv_inf_vir','all_srv_rol' | ForEach-Object { "^$([regex]::Escape($_))$" }) -join '|'

#Filter stringarray
$StringArray -notmatch $exclude

【讨论】:

  • 谢谢弗罗德。我向你保证,我确实在其中投入了很多时间。创建了一些函数来处理它,遍历数组并检查字符串是否是数组中字符串之一的子字符串。无论如何,您将必须排除在单独数组中的“顶级”字符串的解决方案工作得非常快。再次感谢。
猜你喜欢
  • 2011-03-05
  • 1970-01-01
  • 2020-01-03
  • 2018-02-05
  • 2011-01-06
  • 1970-01-01
  • 2021-03-17
  • 2020-08-09
  • 1970-01-01
相关资源
最近更新 更多