• 数组和Hash表


    数组和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

     
     
     
    标签: Powershell
  • 相关阅读:
    MyGeneration:开源的代码生成工具
    有了NHibernate就不再需要DAO了
    在vs编辑器里走来走去的快捷键
    asp.net的程序的一种简化结构
    取得gridview的行值
    asp.net中MVC模式的简单实现
    美味书签上的信息质量要好于博客RSS
    DAO已死,至少是中小型项目是这样
    免费好看的msdn中文杂志电子版
    Rhino Mocks是很不错的开源测试框架
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3311525.html
Copyright © 2020-2023  润新知