数组和Hash表

当显示多条结果时,存储在变量中非常智能,变量类型会自动转换为一个数组。

在下面的例子中,使用GetType()可以看到$a变量已经不是我们常见的string或int类型,而是Object类型,使用-is操作符来判断是否是个数组,返回True则是数组,返回False则不是。

如果要统计数组的行数,用我们前面学到的一个方法count即可。例如要看一下$a变量值的行数:

数组都有一个下标索引,用于访问其中的值,从0开始。例如我要访问$a第六行结果,在Powershell Console中输入$a[5]打印出结果。

创建数组变量

数组变量是一种特殊而且十分有用的变量,是有N个普通的变量组成。一个数组包含多个值得变量,没有尺寸限制。在Powershell中创建数组变量非常简单。

在这个事例中,分别定义了$array和$array1两个数组变量,存放1到4连续的4个阿拉伯数字,每个元素中间用逗号隔开。其中(..)标识连续的意思。

在一个数组中,除了可以存放相同数据类型元素之外,也可以存放不同的数据类型。

在这个例子中,数组变量$ab存放了字符串类型,数字类型以及datetime类型三种元素:

在以上的数组变量中,都赋予了初始值在里面,有些情况下,数组值是空的,如何创建一个空元素的数组变量呢?

$array = @() #定义无初始值的数组变量

打印数组元素值

数组变量定义好之后,数据存放于数组之中,在指令执行过程中有使用到该数组元素值时,如果将指取出来。在前面也演示过一个例子$a[1], 数组变量【元素地址】,其中地址是从0开始,如果从数组中取出多个值,就需要指定多个地址。

在这条指令中,结果打印变量$a第2行,21行,31行数据。

添加删除元素

#元素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

$array += "Hello"

当为此数组添加字符串则出现报错。

Hash

哈希表,也就是字典,是一种非常优秀的数据结构,允许我们使用关键字进行查询,它几乎没有性能损失,这些都是因为它的基本结构能够很好的符合计算机存储运算特性。

创建一个新的Hash

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

打印数据可以通过关键字

$hashlist["IP"]

$hashlist["Name","IP"]

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

$hashlist.IP

在有些情景中,需要把数组的数据存放在Hash表中,如何实现呢?来看一个简单的例子:

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

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

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

$hashlist.int

$hashlist.string

在现有的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

修改和删除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

 
 
 
标签: Powershell

数组和Hash表的更多相关文章

  1. 用链表和数组实现HASH表,几种碰撞冲突解决方法

    Hash算法中要解决一个碰撞冲突的办法,后文中描述了几种解决方法.下面代码中用的是链式地址法,就是用链表和数组实现HASH表. he/*hash table max size*/ #define HA ...

  2. 6.数组和Hash表

    当显示多条结果时,存储在变量中非常智能,变量类型会自动转换为一个数组. 在下面的例子中,使用GetType()可以看到$a变量已经不是我们常见的string或int类型,而是Object类型,使用-i ...

  3. php 实现hash表

    hash表又称散列表,通过把关键字key经过hash函数映射到hash表中某个位置获取记录. 存放记录的数组又称为hash表,映射函数称为hash函数 下面是php中实现hash表的方法 <?p ...

  4. PHP数组/Hash表的实现/操作、PHP变量内核实现、PHP常量内核实现 - [ PHP内核学习 ]

    catalogue . PHP Hash表 . PHP数组定义 . PHP变量实现 . PHP常量实现 1. PHP Hash表 0x1: 基本概念 哈希表在实践中使用的非常广泛,例如编译器通常会维护 ...

  5. hash-1.hash表和hash算法

    1.hash表 哈希表,也叫散列表,是根据关键码(Key)而直接访问的数据结构,也就是它把Key映射到表中一个位置来访问记录,即,把key计算成hashcode,把hashcode存到表中.这个把ke ...

  6. Hash表算法

    出处:http://blog.csdn.net/v_JULY_v 第一部分:Top K 算法详解问题描述百度面试题:    搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的 ...

  7. HASH表原理(装)

    HASH表原理 大家都知道,在所有的线性数据结构中,数组的定位速度最快,因为它可通过数组下标直接定位到相应的数组空间,就不需要一个个查找.而哈希表就是利用数组这个能够快速定位数据的结构解决以上的问题的 ...

  8. 十一、从头到尾彻底解析Hash 表算法

    在研究MonetDB时深入的学习了hash算法,看了作者的文章很有感触,所以转发,希望能够使更多人受益! 十一.从头到尾彻底解析Hash 表算法 作者:July.wuliming.pkuoliver  ...

  9. NGINX(三)HASH表

    前言 nginx的hash表有几种不同的种类, 不过都是以ngx_hash_t为基础的, ngx_hash_t是最普通的hash表, 冲突采用的是链地址法, 不过这里冲突的元素不是一个链表, 而是一个 ...

随机推荐

  1. 开发现代ASP.NET应用程序

    新思想.新技术.新架构——更好更快的开发现代ASP.NET应用程序(续1)   今天在@张善友和@田园里的蟋蟀的博客看到微软“.Net社区虚拟大会”dotnetConf2015的信息,感谢他们的真诚付 ...

  2. .net EF 事物 订单流水号的生成 (二):观察者模式、事物、EF

    针对.net EF 事物 订单流水号的生成 (一)  的封装. 数据依然不变. using System; using System.Linq; using System.Transactions; ...

  3. 基于Cocos2dx + box2d 愤怒的小鸟的实现Demo

    1. Demo初始界面 2. 游戏界面 3. 精确碰撞检測 4. 下载  压缩文件文件夹 AngryBird source    愤慨的小鸟Demo源码,基于Cocos2dx C++,以及box2d技 ...

  4. JS读写Cookie(设置、读取、删除)

    JS读写Cookie(设置.读取.删除) Cookie是客户端存放数据的一种方式,可用来做状态保持. 1.设置Cookie: a.无过期时间:(若不设置过期时间,默认为会话级Cookie,浏览器关闭就 ...

  5. 将程序添加到右键菜单和图标(以记事本、UltraEdit为例)

    原文:将程序添加到右键菜单(以记事本.UltraEdit为例) 如何将程序加入右键菜单,这里分别以记事本.UltraEdit为例! 以记事本程序为例: 1. 在运行中输入regedit,打开注册表,找 ...

  6. SQL编程之生日问题

    在学习MySQL的时候,一个较为经典的SQL编程题目就是生日问题,已知某个用户的出生日期和当前日期,计算他近期的生日. 一般须要考虑两个问题 闰年2月是29天 今年的生日是否过完 比如:某人的生日是1 ...

  7. Linux下给mysql创建用户分配权限

    1.新建用户 //登录MYSQL @>mysql -u root -p @>密码 //创建用户 mysql> insert into mysql.user(Host,User,Pas ...

  8. 通过扩展改善ASP.NET MVC的验证机制[实现篇]

    原文:通过扩展改善ASP.NET MVC的验证机制[实现篇] 在<使用篇>中我们谈到扩展的验证编程方式,并且演示了本解决方案的三大特性:消息提供机制的分离.多语言的支持和多验证规则的支持, ...

  9. C#函数式编程-高阶函数

    随笔分类 -函数式编程 C#函数式编程之标准高阶函数 2015-01-27 09:20 by y-z-f, 344 阅读, 收藏, 编辑 何为高阶函数 大家可能对这个名词并不熟悉,但是这个名词所表达的 ...

  10. js 正则之检测素数

    原文:js 正则之检测素数 相信很多人应该看过这篇文章,我第一次看到的时候是11年的样子,那时候学vbs的时候看过这个问题.原文<检查素数的正则表达式>,在文章里已经解释了他是怎么判断的, ...