访问数组中的值(Accessing Values in an Array)

翻译 2007年09月24日 22:22:00
 
如下翻译来自微软TechNet脚本中心:
http://www.microsoft.com/technet/scriptcenter/resources/pstips/jun07/pstip0622.mspx
译者: Edengundam(马涛)
 
访问数组中的值(Accessing Values in an Array)
无论脚本专家的生活方式多么值得憧憬(例如, 仅在过去一年脚本专家Jean Ross和Greg Stemp出现在了各个地方, 从Orlando, FL 到 … 恩,还是Orlando, FL), 本质上来说他们是追求着简约的常人. 以Windows PowerShell为例. 如果问100个人他们最喜欢Windows PowerShell的什么特性时, 你很可能会得到100种不同的答案, 这些答案中大多数是精妙的新特性, 例如: 访问.NET框架的功能. 如果询问脚本专家 (scripting guys) 他们最喜欢Windows PowerShell的什么特性, 你很可能得到相同的答案: Windows PowerShell为我们营造的访问书中值的帅气的方法.
如果你是熟悉VBScript的话, 对于数组来说你可能会感觉到有些可怕. 为什么? 恩, 有一点就是, 你不能回显任何数组的值; 这将导致“类型不匹配”的错误. 例如, 看看下面的VBScript脚本:
x = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
Wscript.Echo x
这能做到吗? 你已经知道答案了, 不是嘛? 不行, 它更本不能做到. 取而代之的是, 你需要使用For Each或For Next循环结构来获取x中的值:
x = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
 
For Each y in x
    Wscript.Echo y
Next
这没什么难得, 但是这要求我们完成一些工作. 除此之外, 你可能还需要预先确定x在第一次使用时是数组类型(这就需要你做更多的事情). 毕竟, 对非数组对象执行循环操作, 将会导致错误的发生:
x = 1
 
For Each y in x
    Wscript.Echo y
Next
这个例子中我们将得到的返回结果就是“Object not a collection.”
使用Windows PowerShell, 一切都会截然相反. 例如, 思考如下的Windows PowerShell脚本:
$x = 1,2,3,4,5,6,7,8,9,10
$x
运行这个脚本将会发生什么呢? 这些就是将会发生的结果:
1
2
3
4
5
6
7
8
9
10
换句话说, Windows PowerShell通过回显数组本身, 使得您能访问数组的所有值(此例中: $x). 你不需要使用For Each循环或者For Next循环; PowerShell已经为您完成了.
当然, 使用VBScript你不一定访问数组中所有的成员; 你可以通过指定下标来访问特定的数组元素. 例如, 假设你希望访问下面数组的第三个元素:
x = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
由于数组在VBScript (在PowerShell中也一样)是“基于0的”也就是说数组第一个元素的下标是0, 第二个元素下标是1, 如法炮制第三个元素的下表就是2. 我们如何只访问第三个元素? 使用类似这样的代码即可:
Wscript.Echo x(2)
正如您所料,Windows PowerShell 使您能够执行相同的操作,并使用非常类似语法; 例如, 下面代码将会回显PowerShell 数组的第三个元素:
$x[2]
这只是个最基本的应用. 要回显该数组中的最后一个元素? 这在VBScript中是可行的, 使用类似下面这样有点疯狂的结果即可:
Wscript.Echo x(Ubound(x))
在Windows PowerShell中完成同样的工作:
$x[-1]
这是什么怪物啊? 那么返回数组中倒数第二个元素? 没问题(译注: 这种语法在Perl中是允许的, 但是, 应该尽量避免使用这种语法, 使用数组的Length属性更好一些. ):
$x[-2]
以此类推.
别急, 还没完呢. 假设你希望回显索引号为1, 3, 5和7的元素值? 不管你信不信, 一样没问题; 只需要确保使用逗号分隔每个元素的索引数字:
$a[1,3,5,7]
现在上演压轴好戏. Windows PowerShell提供了“数值范围”运算符(..), 允许你指定一个数值范围, 它非常适合用于处理数组. 假设你有含有100元素的数组, 我们需要回显索引为37-79的数值. 如果我们真的想做, 我们可以列出每个索引. 或者我们适用范围运算符来代替这种不太可行的办法:
$a[37..79]
太棒了, 不是嘛? 更加令人振奋的是(译注:此处英文习语: add icing to the cake. 在某些时候可以翻译为双喜临门, 但是此文章, 我选择了保留句子关系和语气, 将句子调整通顺.), 范围运算符不仅仅限制在数组使用. 例如, 试试这个单行的脚本, 看看会发生什么:
1..100
甚至连这些追求简约的人也已经被PowerShell的优点深深的吸引了. (译注: 这篇文章中形容脚本专家的英文单词为: simple people with simple tastes, 我是根据面对100个脚本专家得到相同答案这里, 推测: 脚本专家希望以最简约的形式完成问题. 通过全文展示, PowerShell相比Vbscript来说, 数组访问上更加简单, 强大. 因此面对这些挑剔的追求简约之人来说, PowerShell能够达到他们的要求. 如果您对本篇文章有任何的翻译建议, 请您联系我, 希望共同提高翻译水平. )
 
 

Spinner数组数据从arrays.xml中获取

arrays.xml中代码如下:             上海市         厦门市         福建市         北京市         天津市      ...
  • Scorpio_gao
  • Scorpio_gao
  • 2016年01月12日 10:58
  • 1678

C++内置数组和array的比较

array是C++11中新提出来的容器类型,与内置数组相比,array是一种更容易使用,更加安全的数组类型,可以用来替代内置数组。作为数组的升级版,继承了数组最基本的特性,也融入了很多容器操作,下面介...
  • u011405218
  • u011405218
  • 2017年04月24日 19:40
  • 2071

C++/CLI 托管C++的数组介绍【4】

托管数组实际是System::Array 类型的对象,因此在 C++/CLI 程序中创建的托管数组能使用该类提供的各种方法和属性。 [1] 定义  [qualifiers] [c...
  • aoshilang2249
  • aoshilang2249
  • 2015年01月01日 09:20
  • 3275

Java中Array与ArrayList的主要区别(

1)精辟阐述: 可以将 ArrayList想象成一种“会自动扩增容量的Array”。 2)Array([]):最高效;但是其容量固定且无法动态改变;      ArrayList:  容量可...
  • chenglansky
  • chenglansky
  • 2015年03月23日 19:35
  • 7106

大数据学习之Scala中数组(Array)与循环控制for联合使用学习(4)

相信大家在开发当中数组这个集合用到的频率还是相当多的,因此有必要好好学习它。 下面,就跟随我的脚步来了解和学习使用Scala中的数组。 数组定义: var 数组名:Array[数据类...
  • Poison_H
  • Poison_H
  • 2016年01月04日 15:48
  • 4599

PHP中处理数组键和值的函数

PHP中关于处理数组键和值的函数举例
  • living_ren
  • living_ren
  • 2017年06月26日 21:16
  • 389

【前端学习]】javascript数组(Array)

最近几年,前端技术发展迅速,涌现出了大量的框架和插件,在项目开发的过程中,大大小小框架要用到无数个,要想快速掌握这些框架的,前端的基础知识是必须要掌握的,不然太影响开发效率了.下面将逐步学习前端知识,...
  • xtu_xiaoxin
  • xtu_xiaoxin
  • 2015年09月25日 20:05
  • 3504

android中使用xml里的array资源

来自: http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0105/2263.html 在使用PreferenceA...
  • luofeixiongsix
  • luofeixiongsix
  • 2015年09月12日 15:48
  • 1579

Numpy数组的保存与读取

1. 数组以二进制格式保存np.save和np.load是读写磁盘数组数据的两个主要函数。默认情况下,数组以未压缩的原始二进制格式保存在扩展名为npy的文件中,以数组a为例np.save("filen...
  • u010089444
  • u010089444
  • 2016年10月05日 13:21
  • 3389

JavaScript中数组Array.prototype的常用的方法总结

Array构造函数的API,我们可以通过控制台打印Array.prototype可以知道有以下这些方法。这是Array的原型对象的所有方法,对数组而言是可以继承所有的这些方法的: 接下来,我们就以12...
  • SpicyBoiledFish
  • SpicyBoiledFish
  • 2017年04月26日 11:40
  • 463
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:访问数组中的值(Accessing Values in an Array)
举报原因:
原因补充:

(最多只允许输入30个字)