arrays - 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]
。我该怎么做?
解决方案
这个问题有几个答案,如果$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上找到更多信息。
推荐阅读
- c# - 尝试通过用 C# 编写的 Windows 服务在 ThingWorx 上上传扩展
- php - 将多行转换为单行
- c# - 迭代 linq 查询中的数组/列表
- gcc - 针对特定平台的交叉编译——链接 libc
- xamarin - 如何在 Xamarin.Android 中异步实现 Android In App BillingClient
- javascript - api调用后猫头鹰轮播2不工作
- vue.js - Vue.js prop 同步修饰符不更新父组件
- javascript - javascript将变量放入模块
- matlab - MATLAB fft 与数学傅立叶
- qt - QAction 作为 QGraphicsItem 上的键盘快捷键