6.數組和Hash表


當顯示多條結果時,存儲在變量中非常智能,變量類型會自動轉換為一個數組。

在下面的例子中,使用GetType()可以看到$a變量已經不是我們常見的string或int類型,而是Object類型,使用-is操作符來判斷是否是個數組,返回True則是數組,返回False則不是。

clip_image002

clip_image004

如果要統計數組的行數,用我們前面學到的一個方法count即可。例如要看一下$a變量值的行數:

clip_image005

數組都有一個下標索引,用於訪問其中的值,從0開始。例如我要訪問$a第六行結果,在Powershell Console中輸入$a[5]打印出結果。

創建數組變量

數組變量是一種特殊而且十分有用的變量,是有N個普通的變量組成。一個數組包含多個值得變量,沒有尺寸限制。在Powershell中創建數組變量非常簡單。

在這個事例中,分別定義了$array和$array1兩個數組變量,存放1到4連續的4個阿拉伯數字,每個元素中間用逗號隔開。其中(..)標識連續的意思。

clip_image006

在一個數組中,除了可以存放相同數據類型元素之外,也可以存放不同的數據類型。

在這個例子中,數組變量$ab存放了字符串類型,數字類型以及datetime類型三種元素:

clip_image008

在以上的數組變量中,都賦予了初始值在里面,有些情況下,數組值是空的,如何創建一個空元素的數組變量呢?

$array = @() #定義無初始值的數組變量

打印數組元素值

數組變量定義好之后,數據存放於數組之中,在指令執行過程中有使用到該數組元素值時,如果將指取出來。在前面也演示過一個例子$a[1], 數組變量【元素地址】,其中地址是從0開始,如果從數組中取出多個值,就需要指定多個地址。

在這條指令中,結果打印變量$a第2行,21行,31行數據。

clip_image010

添加刪除元素

#元素New Vlaue

$array = 1,2,3,4

$array += "New Vlaue"

$array

在上面的例子中,向數組中添加元素非常容易做到,但是從數組中移除元素卻不那么容易,為了能對數組很好的操作,我們可以使用.Net Framwork ArrayList類 System.Collections.ArrayList

看下面的例子,是不是使用.net對象更好操作呢?

#創建.net數組對象

$array = New-Object system.Collections.ArrayList

#在數組$array中添加元素1,2,3,4

$array.add("1")

$array.add("2")

$array.add("3")

$array.Add("4")

#打印數組變量$array結果

$array

#移除元素4

$array.Remove("4")

$array

強制類型數組

例如要定義一個整型數組變量,當添加非整型值時將提示錯誤或自動轉換成整型。

[int[]]$array = 1,2,3

$array += 4

$array += 10.56

clip_image011

$array += "Hello"

當為此數組添加字符串則出現報錯。

clip_image013

Hash

哈希表,也就是字典,是一種非常優秀的數據結構,允許我們使用關鍵字進行查詢,它幾乎沒有性能損失,這些都是因為它的基本結構能夠很好的符合計算機存儲運算特性。

創建一個新的Hash

$hashlist = @{Name = "PC1"; IP = "1.1.1.1"; User = "Sam.lu"}

clip_image015

打印數據可以通過關鍵字

$hashlist["IP"]

$hashlist["Name","IP"]

clip_image017

當然我們也可以采用另外的方式,不使用[]

$hashlist.IP

在有些情景中,需要把數組的數據存放在Hash表中,如何實現呢?來看一個簡單的例子:

$array1 = 1,2,3,4,5

$array2 = "beijing","shanghai","tianjin","hangzhou"

$hashlist = @{int = $array1;string = $array2}

$hashlist.int

$hashlist.string

clip_image018

在現有的Hash表中插入關鍵字

在上面的例子中:

$hashlist = @{Name = "PC1"; IP = "1.1.1.1"; User = "Sam.lu"}

里面有三個關鍵字Name,IP,User,能不能在現有Hash表中再添入關鍵字,例如加一個位置,添加的方法有兩種:

1.

$hashlist.Date = Get-Date

2.

$hashlist["Location"] = "Hangzhou"

$hashlist

clip_image019

修改和刪除Hash表中的值

在Hash表中,直接可以使用關鍵字進行賦值,后面修改的值會覆蓋已存在的值,通過上面的學習,我們可以了解到,使用關鍵字可以采用兩種方式,一種是使用【】,一種則使用(.關鍵字),兩種方法都能對關鍵字的值進行操作。

$hashlist["Date"] = (Get-Date).AddDays(-1)

$hashlist.Location = "New York"

刪除關鍵字則使用remove方法即可。

$hashlist.remove(“date”)

Hash表還有另外一個大用途,可以定義結果的輸出格式。使用Hash表定義輸出格式有四個關鍵字:

Expression 指定要輸出對象的屬性值

Witdth 字符串列的寬度

Lable 列標題

Alignment 列中位置是左還是右

#定義輸出結果第一列的格式,對象屬性是Name,寬度30,列標題Filename,左對齊

$colume1 = @{expression = "Name";widt = 30; lable = "Filename";alignment = "left"}

#定義輸出結果第二列的格式,對象屬性是LastWriteTime,寬度40,列標題Last Modification,右對齊

$colume2 = @{expression = "LastWriteTime";widt = 40; label = "Last Modification";alignment = "right"}

#使用dir指令列出本目錄下所有的文件及目錄,按照定義的輸出格式第一列輸出Name,第二列輸出LastWriteTime

dir |Format-Table $colume1,$colume2

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM