注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

我的博客

 
 
 

日志

 
 

〔TechNet译文〕从数组中移除项目  

2009-11-16 14:51:48|  分类: powershell |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
当编写系统管理脚本时数组毫无疑问是非常有用的。同样在Windows PowerShell中使用数组也比较简单的,这一点也基本没什么疑问(假设和无疑相比你可以有点怀疑);为此,我们已经在几周前的“每周提示”中谈论了针对数组你可以使用的几个不同的技巧。不过内建在Windows PowerShell中的数组至少有一个弱点:添加新项目进数组也许很容易,但是没有相对简单的方法从一个数组中移除已存在项目。这很可惜,但是这就是既成事实的事,没什么办法。毕竟你不得不使用现在内建于Windows PowerShell的数组,不是么?
使用.NET Framework ArrayList类
你已经得出我们问题的答案了,是么?你不得不使用内建在Windows PowerShell内的数组?当然不。毕竟Windows PowerShell提供了完整的对.NET Framework的访问,而.NET Framework提供所有可选择的数组,集合及哈希表的组合。不喜欢内建在Windows PowerShell的数组类?那么使用一个不同的数组类吧。
好问题:哪一个不同的数组类型我们能使用?好的,值得研究的一个数组类型是System.Collections.ArrayList类。为了使用这个数组类型,我们所要做的是使用New-Object来创建新的ArrayList类的实例,一个我们命名为$a的实例:
  1. $a = New-Object System.Collections.ArrayList
复制代码
这个命令给了我们一个名为$a的空数组。如果我们想要向数组内添加一些信息(这是我们有可能做的),我们所要做的是调用Add然后跟上我们想要添加进数组的项目。例如,下面有一系列的命令将六种不同的颜色添加进我们的数组:
  1. $a.Add("red")
  2. $a.Add("yellow")
  3. $a.Add("orange")
  4. $a.Add("green")
  5. $a.Add("blue")
  6. $a.Add("purple")
复制代码
如果我们现在回显$a的值,我们会得到以下输出:
  1. red
  2. yellow
  3. orange
  4. green
  5. blue
  6. purple
复制代码
很酷不是么?哦,我们知道了。你看上去没有被打动,也许这是因为,离我们的主题太远了,我们还没有真正的开始处理我们的问题。但是不要担心,我们正要改变现状。
首先,让我们看看我们是否能从数组中移除指定项。如果是标准的PowerShell数组类这是困难的提议。正如在Windows PowerShell帮助文档中说明的:
从数组中删除元素不是那么容易,你能创建包含从已存在数组选择出的元素的新数组。例如,使用$a数组中除了索引号为2外的其它所有元素创建新的$t数组,输入:
  1. $t = $a[0,1 + 3..($a.length - 1)]
复制代码
诚然,这能运行。在另一方面,这也不是特别直观,这依赖于你对你想要移除的项目的索引号的熟悉程度;你不能简单说:“嗨,$a,你能帮我移除yellow么?”但是,当你使用ArrayList类的时候你所要做的就是:
  1. $a.Remove("yellow")
复制代码
如你所见,这也许是你用过的最简单的命令了:你要做的是调用Remove方法,附上要移除的项目作为方法的参数。现在看下$a的值,注意到任何消失的东西没?
  1. red
  2. orange
  3. green
  4. blue
  5. purple
复制代码
对:yellow被移除了,我们除了调用Remove方法之外不用再做更复杂的事了。很酷吧。
有另外一种方法能快速简单的从数组中移除多个项目(是的,我们说是多个项目)。假设我们有我们的原始数组,即有六种不同颜色的数组。为了某些原因,我们决定保留开始的三种颜色(red,yellow,orange)并删除余下的三个。我们怎么做呢?像这样:
  1. $a.RemoveRange(3,3)
复制代码
我们在这里所做的是调用RemoveRange方法,该方法让我们能从ArrayList中删除一个范围内的项目。注意我们向RemveRange传递了一对参数,在本例中是一对3。第一个三代表第一个被移除的项目的索引号。像大多数数组一样,在ArrayList中第一个项目的索引号是0;这意味着第二个项目的索引号是1,第三个项目的索引号是2。这和我们有关么?一定是这样的;毕竟,这意味这第四个项目(第一个被移除的项目)的索引号为3。于是第一个3,告诉RemoveRange我们想要移除的第一个项目的索引号是3(数组中的四个项目)
那么第二个三代表什么?这很简单:代表我们想要移除的项目数。假设我们只想要移除项目4和5,保留6。在本例中,我们使用这个命令:
  1. $a.RemoveRange(3,2)
复制代码
这将使得$a等于:
  1. red
  2. orange
  3. yellow
  4. purple
复制代码
顺便说一句,你能通过回显Count属性的值决定数组中项目数量,像这样:
  1. $a.Count
复制代码
噢,还有一件事:如果你想删除数组中所有项目?这里还有个办法,调用Clear方法:
  1. $a.Clear()
复制代码
这只是.NET Framework中众多可选的数组,集合及哈希表中的一个。下周我们将讨论另一个可选的:哈希表。

  评论这张
 
阅读(640)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018