PowerShell中的陣列使用
在日常處理中,除了使用像“數值型別”和“字串型別”外,還需要使用能夠包含其他物件的“集合”型別(請注意,這裡的集合對應英文是Collection,而非數學概念上的Set。)。大多數常見語言,都提供一些操作集合型別的語法。最基本的集合型別就是陣列型別,它提供了一種下標基於0的陣列物件。
首先通過幾個簡單的例子,來了解一下PowerShell中的陣列是如何使用的。
PS C:\Users\Administrator> 1,'a',2MB,0x100 1 a 2097152 256
上面的小例子輸出了4個物件:數值“1”、字串“a”(注意:雖然只有一個字元,但這裡仍然是一個字串)、數值“2MB”和十六進位制數值“0x100”。也許您很想了解這個例子和陣列究竟有什麼聯絡,實際上這個例子清楚地解釋了PowerShell中陣列型別的語法。在PowerShell中,只要把不同的物件用逗號“,”連線起來,就可以構造出陣列物件。本章節的重點在於像大家介紹陣列型別的使用,因此將在後續的章節詳細介紹逗號表示式“,”的使用。我們回到剛才的例子中,雖然這4個物件組成了PowerShell中的陣列物件,但是如果沒有把這個物件儲存起來或者丟棄掉的話,PowerShell就會利用預設的格式器和輸出器將它們輸出到控制檯上。最終我們就看到了上面四行輸出結果。
現在我們知道了PowerShell中構造陣列的最簡單的方式,接下來讓我們一起探索更多關於陣列物件更多的特性:
PS C:\Users\Administrator> $array1 = 1,2,3,4 PS C:\Users\Administrator> $int = 1 PS C:\Users\Administrator> $array1.count 4 PS C:\Users\Administrator> "$array1" 1 2 3 4 PS C:\Users\Administrator> $int.count PS C:\Users\Administrator> "$int" 1
細心的讀者肯定已經發現,在第一個例子中,使用了逗號構造了一個包含四個整數的陣列,並將其儲存在變數$array1中。接下來將數值1儲存在變數$int中。陣列物件上有一個屬性Count用來指出當前陣列中的物件數量,我們可以看到$array1中包含了4個物件。但是在$int上確沒有該屬性(注意:如果引用的屬性不存在,PowerShell返回$null物件,該物件不會對控制檯產生任何影響,只是簡單的使提示使用者繼續輸入命令)。
PowerShell是基於物件的shell,現在讓我們來看看陣列究竟是什麼物件:
PS C:\Users\Administrator> $array1.GetType().FullName System.Object[]
在PowerShell中呼叫物件上的GetType()方法,可以得到該物件的型別物件(型別也是一個物件)。而該物件上的FullName屬性就是該物件表示的型別的名稱。這裡有點繞口令了,總之如果你想知道一個物件的型別就呼叫GetType()方法,再訪問FullName屬性就可以了。
學會了建立陣列以及知道了陣列包含的物件數量,現在來學習一下如何訪問陣列中的元素。實際上PowerShell的陣列其實通過.Net類庫中的陣列來實現的,也就是說PowerShell在.Net類庫原有的實現上,增加了一些PowerShell便捷的訪問介面,而實際操作的物件還是.Net類庫中的物件。使用陣列時,需要大家記住陣列的第一個元素的下標是“0”、陣列的最後一個元素下標是陣列長度減去1。例如:
PS C:\Users\Administrator> $array = 1,2,3 PS C:\Users\Administrator> $array.Length 3 PS C:\Users\Administrator> $array[2] 3 PS C:\Users\Administrator> $array[1] 2
實際上,Count是屬性Length的別名,這主要是為不同物件提供一致性介面的技術。這裡需要特別注意的是,當陣列訪問越界時,PowerShell是不會給出任何錯誤資訊的,只會得到一個$null物件。
如果我們已經有一個陣列了,應該如何向這個陣列中新增新的元素呢?在Perl中,你只需簡單的使用你想使用的索引,然後儲存上你想儲存的數值就完成了任務。然而在PowerShell中,如果你使用類似的方法就會得到如下的結果:
PS C:\Users\Administrator> $a = "My ThinkPad", "My PC" PS C:\Users\Administrator> $a[0] My ThinkPad PS C:\Users\Administrator> $a[1] My PC PS C:\Users\Administrator> $a[2] = "My Mac" 陣列賦值失敗,因為索引“2”超出範圍。 所在位置 行:1 字元: 5 + $a[ <<<< 2] = "My Mac" + CategoryInfo : InvalidOperation: (2:Int32) [], RuntimeException + FullyQualifiedErrorId : IndexOutOfRange PS C:\Users\Administrator> $a = $a + "My Mac" PS C:\Users\Administrator> $a My ThinkPad My PC My Mac 在PowerShell中,陣列其實是一個大小固定的資料結構,如果需要向陣列中新增更多的物件時,就必須使用加號“+”運算子。在執行“+”操作的過程中,PowerShell實際上進行了下述操作: 1) 首先建立一個新的陣列,該陣列的大小能夠存下運算結果的所有物件; 2) 將第一個陣列的成員拷貝到新陣列中; 3) 將第二個陣列的成員拷貝到新陣列中。 通過觀察這個操作過程,很容易發現:如果陣列中包含元素很多,而且頻繁的向陣列新增物件,一定會使PowerShell執行指令碼時更慢。因此,我們需要謹記:大多數時候,陣列是PowerShell中的便捷的工具,但是應該避免頻繁地對其進行新增操作。在.Net類庫中提供了其他的資料結構來滿足需要經常向陣列中新增物件的需求。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8183550/viewspace-698011/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java 中的陣列 如何使用Java陣列
- Linux shell 中陣列的使用Linux陣列
- JavaScript 中陣列 sort() 方法的基本使用JavaScript陣列
- toString 方法在陣列中的使用陣列
- Oracle中陣列使用方法Oracle陣列
- 陣列的使用陣列
- Java陣列03:陣列使用Java陣列
- Ruby中的陣列陣列
- Go中的陣列Go陣列
- Java中的陣列Java陣列
- Java中陣列及相關類的使用Java陣列
- Java陣列的使用Java陣列
- Oracle陣列的使用Oracle陣列
- 演算法基礎:動態規劃陣列中滾動陣列的使用演算法動態規劃陣列
- JavaScript中對陣列和陣列API的認識JavaScript陣列API
- Bash Shell指令碼中的陣列使用例項指令碼陣列
- c++中的陣列C++陣列
- 陣列中的逆序對陣列
- [譯]Perl中的陣列陣列
- 如何在 JavaScript 中更好地使用陣列JavaScript陣列
- 陣列二:使用陣列可變函式為陣列排序陣列函式排序
- 陣列的靈活使用陣列
- [轉]Oracle陣列的使用Oracle陣列
- 陣列中每個陣列元素出現的次數陣列
- bash指令碼中的普通陣列和關聯陣列指令碼陣列
- 【Java】陣列使用Java陣列
- js如何使用索引訪問陣列物件中的元素JS索引陣列物件
- 淺談二維陣列在傳參中的使用陣列
- 陣列-在Shell指令碼中的基本使用介紹陣列指令碼
- JS 中特殊的物件-陣列JS物件陣列
- 去除陣列中的 null 值陣列Null
- MySQL中陣列的儲存MySql陣列
- Javascript中的陣列物件排序JavaScript陣列物件排序
- Ruby 中陣列的常用操作陣列
- OC中的陣列、字典、集合陣列
- javascript中陣列的回顧JavaScript陣列
- JavaScript中對陣列的操作JavaScript陣列
- 【陣列】1394. 找出陣列中的幸運數(簡單)陣列