首页 > 系统相关 >【Powershell】在 PowerShell 数组中添加和删除项

【Powershell】在 PowerShell 数组中添加和删除项

时间:2024-01-23 14:06:30浏览次数:31  
标签:Apple ArrayList GetType PowerShell IsFixedSize 数组 Fruits Powershell

在 PowerShell 数组中添加和删除项是一个可能会导致一些意外的报错,这里我把可用的办法总结一下。

问题:

创建一个数组,我们将记下 System.Array 类型:

$Fruits = "Apple","Pear","Banana","Orange"
$Fruits.GetType()

但是,如果我们尝试向数组添加或删除项目,则会出现“集合大小固定”的错误

$Fruits.Add("Kiwi")
$Fruits.Remove("Apple")
$Fruits.IsFixedSize


【Powershell】在 PowerShell 数组中添加和删除项_夏明亮

我们可以看到,我们最初创建的数组是固定大小的。ISFixedSize 属性的 MSDN 页有助于解释这一点。请注意,它支持修改现有元素,但不支持添加或删除其他元素。

http://msdn.microsoft.com/en-us/library/system.array.isfixedsize(v=vs.110).aspx

【Powershell】在 PowerShell 数组中添加和删除项_powershell_02

问题原因已经很清楚了,那么如何实现修改的目的呢?

方法1

解决此问题的一种方法是改用 System.Collections.ArrayList

[System.Collections.ArrayList]$ArrayList = $Fruits
$ArrayList.GetType()
$ArrayList.IsFixedSize

【Powershell】在 PowerShell 数组中添加和删除项_error_03

现在,如果我们尝试前面的添加和删除方法,我们就成功了:

$ArrayList.Add("Kiwi")
$ArrayList
$ArrayList.Remove("Apple") 
$ArrayList

【Powershell】在 PowerShell 数组中添加和删除项_fixed_04

方法2

另外,如果我们坚持使用原来的数组对象,也可以用下面的方法向其中 "add"一个项目。(这将创建一个包含额外项的新数组)

$Fruits = "Apple","Pear","Banana","Orange"
$Fruits.IsFixedSize
$New = $Fruits += "Kiwi"
$New
$Fruits
$New.GetType()
$New.IsFixedSize

【Powershell】在 PowerShell 数组中添加和删除项_error_05

上面只是为了说明原理,实际代码时这样做才是更加合理的

$Fruits = "Apple","Pear","Banana","Orange"
$Fruits.IsFixedSize
$Fruits = $Fruits += "Kiwi"
$Fruits
$Fruits.GetType()
$Fruits.IsFixedSize

【Powershell】在 PowerShell 数组中添加和删除项_error_06

方法3

将初始数组转换成 System.Collections.ObjectModel.Collection这样的名字优点太长了,下面这个方法可能比使用集合或数组列表的完整类型名称更容易记忆:

$Fruits = "Apple","Pear","Banana","Orange"
$Fruits.IsFixedSize
$Fruits = {$Fruits}.Invoke()
$Fruits
$Fruits.GetType()
$Fruits.IsFixedSize

【Powershell】在 PowerShell 数组中添加和删除项_数组_07

现在,我们可以使用添加和删除方法添加和删除项目:

$Fruits.Add("Melon")
$Fruits
$Fruits.Remove("Apple")
$Fruits

【Powershell】在 PowerShell 数组中添加和删除项_夏明亮_08

OK,这个问题就到这里吧,如果有朋友有更好的办法,欢迎留言区分享哈!!

标签:Apple,ArrayList,GetType,PowerShell,IsFixedSize,数组,Fruits,Powershell
From: https://blog.51cto.com/mlxia/9378894

相关文章

  • PowerShell:因为在此系统上禁止运行脚本
    在运行vue项目时需要拉取npm依赖包:pnpmi报错原因:在计算机上启动Windows  PowerShell时,执行策略很可能是Restricted(默认设置)。当前powershell执行策略无法运行脚本,powershell有四种执行策略:Restricted禁止运行任何脚本和配置文件(默认)AllSigned可以运行脚本,但要求所......
  • 数组的使用和细节
    数组数组是可以存放多个同一类型的数据。在GO中,数组是值类型。也是一种数据结构。数组的简单案例:funcmain(){ //定义一个数组 varhens[3]float64 //给数组每一个元素赋值从下标为0开始共3个元素 hens[0]=1.0 hens[1]=2.0 hens[2]=3.0 //遍历数组 varto......
  • 线性表 - 数组与链表
    感谢@pdai的全栈知识体系,数据结构与算法是相通的,做的题目与原博主不同。https://www.pdai.tech/md/algorithm/alg-basic-array.html数组数组是一种连续存储线性结构,元素类型相同,大小相等,数组是多维的,通过使用整型索引值来访问他们的元素,数组尺寸不能改变。数组的优点:存......
  • awk数组使用
    群里看到有一个大哥需求计算当天的binlog大小,有一个大哥给出下面的shell脚本ls--full-time|grep^-|awk'{s[$6]+=$5}END{for(iins){printf("%s%0.2f\n",i,s[i]/1024/1024)}}'相关解释ls--full-time:ls是列出目录内容的命令、--full-time选项回显示文件和目录的完整时......
  • 利用指针打印数组内容
    #include<stdio.h>#include<assert.h>//因为只是读取数组的数据,而不需要做任何修改//所以我们给形参int*p前面修饰上一个const,以防写出BugvoidPrint_arr(constint*p,intsz){ assert(p); inti=0; for(i=0;i<sz;i++) { printf("%d",*(p+i)); }}......
  • (17)Powershell中的重定向运算符
    (17)Powershell中的重定向运算符默认情况下,Powershell把输出发送到屏幕显示。但是,Powershell也可以将输出重定向至一个文本文件,或将错误输出重定向至常规输出流。重定向运算符有什么用?重定向运算符意味着我们可以将命令的输出信息输出到指定的文件,完全满足脚本中的log的要求,......
  • (16)Powershell中的转义字符
    (16)Powershell中的转义字符转义字符用于对其后的字符给出特殊解释。Powershell中的转义字符是反引号(`),也称为抑音符(ASCII96)。它可用于指示文本(变量名不替换为变量值,直接输出)、行继续(还有后续输入)和特殊字符。1.指示文本(变量名直接输出,不替换为变量值)当转义字符......
  • 238.除自身以外数组的乘积
    1.题目介绍给你一个整数数组nums,返回数组answer,其中answer[i]等于nums中除nums[i]之外其余各元素的乘积。题目数据保证数组nums之中任意元素的全部前缀元素和后缀的乘积都在32位整数范围内。请不要使用除法,且在O(n)时间复杂度内完成此题。示例1:输入:nu......
  • 【glibc】glib 数组
    编译:gcc-g-Wall-O0fuck.c-ofuck`pkg-config--libs--cflagsglib-2.0`1基本操作这里是向数组添加和删除数据的一些主要方法:#include<glib.h>#include<stdio.h>intmain(intargc,char**argv){GArray*a=g_array_new(FALSE,FALSE,sizeof(char*));......
  • 【glibc】glib库数组GArray介绍
    glib库中的数组GArray类型很像C++标准容器库中的vector容器。要使用glib库中的数组中需要声明一个指向GArray类型的指针。GArray的定义如下:structGArray{gchar*data;guintlen;};然后就可以在这个数组前或者数组后添加数据,添加数据的时候数组也会像C++中的vector容器......