访问数组中的值(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能够达到他们的要求. 如果您对本篇文章有任何的翻译建议, 请您联系我, 希望共同提高翻译水平. )
 
 

相关文章推荐

【算法导论学习-011】数组中的逆序对个数(Counting inversions in an array)

1、问题来源 《算法导论》P41思考题2-4:Let A[1..n] be an array of n distinct numbers. (i, j) is called an inversi...

在C++中怎样获得数组的大小?(原文标题:How Would You Get the Count of an Array in C++?)

P.S. 之前在一篇文章中说过VS2005下面_countof的实现,最后提到过为什么使用模板而抛弃之前的实现,后来在网上看到了这篇文章,感觉讲得比较清楚,就翻译了一下,还算简单清楚。

【LeetCode-面试算法经典-Java实现】【215-Kth Largest Element in an Array(数组中第K大的数)】

【215-Kth Largest Element in an Array(数组中第K大的数)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】代码下载【https://github...

Leetcode 215 Kth Largest Element in an Array 数组中第k大的元素

在一个无须数组中找出第k大的元素。

数组-Kth Largest Element in an Array(找出第K大的数)

题目描述; Find the kth largest element in an unsorted array. Note that it is the kth largest elemen...

[LeetCode]448. Find All Numbers Disappeared in an Array(查找数组中消失的所有数字)

448. Find All Numbers Disappeared in an ArrayGiven an array of integers where 1 ≤ a[i] ≤ n (n = size...

转载:how to automate Microsoft Excel and return the values from a multi-cell range to an array

how to automate Microsoft Excel and return the values from a multi-cell range to an array.

[leetcode 153]Find Minimum in Rotated Sorted Array----求旋转数组的最小值

Question: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., ...

Leetcode--Add to List 215. Kth Largest Element in an Array

题目Find the kth largest element in an unsorted array. Note that it is the kth largest element in the ...

[leetcode]215. Kth Largest Element in an Array

题意:给一个数组,求出数组中的第K大数,比如[3,2,1,5,6,4] 求出第2大数,则为5 分析:复习堆排序,对于这道题来讲,找第k大数,可以通过一个小顶堆实现。首先取数组中的前k个数组成小顶堆(具...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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