首页 > 解决方案 > PowerShell - 从数组中删除项目

问题描述

我有一个数组 ( $arr),其中包含:

A STRING -->       $arr[0]
*empty space* -->  $arr[1]
ANOTHER STRING --> $arr[2]
*empty space* -->  $arr[3]
LAST STRING -->    $arr[4]

我想删除$arr[1]$arr[3]。我该怎么做?

标签: arrayswindowspowershell

解决方案


这个问题有几个答案,如果$arr是,System.Array您必须重建它才能删除空格。这是因为这种类型是固定大小的。

你可以如何做到这一点的一些例子是:

PS /> $arr = @(
    'A STRING'
    ' '
    'ANOTHER STRING'
    ' '
    'LAST STRING'
)

# Some examples:
$arr = $arr | Where-Object { -not [string]::IsNullOrWhiteSpace($_) }
# OR
$arr = $arr.Where({ ' ' -ne $_ })
# OR
filter RemoveWhiteSpace {
    if(-not [string]::IsNullOrWhiteSpace($_)){ $_ }
}

$arr = $arr | RemoveWhiteSpace
# And more...

PS /> $arr
A STRING
ANOTHER STRING
LAST STRING

注意,Where-Object不是重建数组的最有效方式,但在本例中效果很好。如果数组更大,过滤集合的最有效方法是:

PS /> $arr = @(
    'A STRING'
    ' '
    'ANOTHER STRING'
    ' '
    'LAST STRING'
)

$newArr = foreach($i in $arr)
{
    if(-not [string]::IsNullOrWhiteSpace($i))
    {
        $i
    }
}

PS /> $newArr
A STRING
ANOTHER STRING
LAST STRING

假设$arr是允许添加和删除元素的动态类型,您可以这样做:

PS /> $arr = [System.Collections.ArrayList]@(
    'A STRING'
    ' '
    'ANOTHER STRING'
    ' '
    'LAST STRING'
)

$arr.RemoveAt('1') # Removes position 1, in turn 
$arr.RemoveAt('2') # 'ANOTHER STRING' is the new position 1

PS /> $arr
A STRING
ANOTHER STRING
LAST STRING

或者像这样:

PS /> $arr = [System.Collections.ArrayList]@(
    'A STRING'
    ' '
    'ANOTHER STRING'
    ' '
    'LAST STRING'
)

$arr.Remove(' ')
$arr.Remove(' ')

PS /> $arr
A STRING
ANOTHER STRING
LAST STRING

您可以在MS Docs上找到更多信息。


推荐阅读