免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 464 | 回复: 0

[学习共享] ps第11课:尽解powershell哈希表 [复制链接]

论坛徽章:
0
发表于 2018-07-01 12:57 |显示全部楼层
尽解powershell哈希表

---------【概述】---------
哈希表,即键值对。键不能有重复。

对象为: System.Collections.Hashtable。
手册在:  https://msdn.microsoft.com/zh-cn ... llections.hashtable(v=vs.110).aspx

常用的场景是,在数组里存哈希表。如$数组a=$哈希a,$哈希b
哈希表里也可以存数组。即哈希表某个键的值,是由数组构成。如: $哈希a=@{键名1=1,'ps传教士原创分享',(get-date);键名2=2,'a',(get-date)}

哈希表中的键名是无序的。但.net也有,按键名排序的哈希表,SortedDictionary。
SortedDictionary在每次插入、删除后都会排序。而排序操作会加速读取,减速写入。使用场景是读多写少。
通常我们不用SortedDictionary。而是用哈希表,在需要排序的时候,用 [orded]$哈希a  来即刻排序。

哈希表内,含有元素最大值,默认为21亿,即int32::max。再增大的话,需要大内存,和调整powershell.exe的.appconfig

还有一种,用于并发的,线程安全型哈希表。
对象为: System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue>
手册在: https://msdn.microsoft.com/zh-cn/library/dd287191(v=vs.110).aspx



哈希表性能:
python的库是c库,性能很好,不过还是比.net或ps差一点点。同类.net对象,比python对象快一点点。

---------【方法属性】---------
.count        键值对数量
.keys        所有键
.values 所有值


add(键,值) 哈希表增加一个键值对。
clear()  清空
clone()
ContainsKey(键) 包含
ContainsValue(值) 包含
GetEnumerator() 返回枚举,供foreach使用
Remove(键) 删除一个键值对。



---------【哈希表的例子】---------
数组用数字作为下标,而哈希表用【键名】作为下标读写,这个下标必须是【字符串】,可以是【字符串变量】。
字符串中若有空格的话,必须用单双引号扩起来。字符串是中文、特殊符号的话,也建议用引号括起来。
$hash =
@{
'a' = 1
'b' = 2
}
$hash['a']  或 $hash.'a'


$变量键名 = 'a'
$hash[$变量键名]

$变量键名 = 'b'
$hash[$变量键名]





---【哈希取所有键名,键值】---
$powershell哈希表 = @{
吼 = 'haha1'
哈 = 'haha2'
'嘿  嘿' = '完全可以使用中文键名,键值哦'
}

$键名数组 = $powershell哈希表.Keys.GetEnumerator()
#$键名数组 返回---> 吼,哈,嘿



$键值数组 = $powershell哈希表.values.GetEnumerator()
#$键值数组
#$powershell哈希表.吼    返回--->   haha1

$键名数组 | Get-Random    #随机返回1个值


---【用哈希表来判断重复,去重都可以】---
$含有重复的文本文件 = 1,1,2,3
# $含有重复的文本文件 = get-content -LiteralPath $args[0] -ReadCount 0
$hash = @{}

$ErrorActionPreference = 'SilentlyContinue' #因为有重复,默认会报异常。此命令关闭异常发出的,报错信息。
foreach ($单行 in $含有重复的文本文件)
{
        $null = $hash.add($单行,'')
}
$hash
#返回123

---【哈希嵌套】---

$麻将牌 = @{
'万'  = @{w=1}
'饼'  = @{b=2}
'条'  = @{t=3}
'字'  = @{z=4}
#原创 2018-07-01

}

$麻将牌
$麻将牌.万
$麻将牌.万.w

ps传教士点评:
数组用的最多,哈希表也比较常用。
哈希的儿子,可以是哈希,(哈希表包含哈希表)
哈希的儿子,可以是数组,
数组的儿子,和可以是哈希,
子子孙孙无穷匮也!


=======================================

powershell脚本第一课:面向对象简介1
http://bbs.chinaunix.net/thread-4263988-1-1.html


ps第二课:常用对象类型
http://bbs.chinaunix.net/thread-4264061-1-1.html



ps第三课:面向对象语言有啥优缺点?
http://bbs.chinaunix.net/thread-4264062-1-1.html



ps第4课:文件目录对象介绍
http://bbs.chinaunix.net/thread-4264293-1-1.html


ps第5课:常用帮助命令
http://bbs.chinaunix.net/thread-4264294-1-1.html


ps第6课:单个字符对象,讲ps如何处理单个字符,含汉字
http://bbs.chinaunix.net/thread-4264556-1-3.html


ps第7课:powershell到底有何优势,为什么要学?
http://bbs.chinaunix.net/thread-4264776-1-1.html


ps第8课:用powershell读写文本、二进制文件。
http://bbs.chinaunix.net/thread-4266404-1-1.html



ps第9课:powershell数组(静态,动态)
http://bbs.chinaunix.net/thread-4267455-1-1.html



ps第10课:powershell中有,世界上最好的脚本编码处理技术
http://bbs.chinaunix.net/thread-4291318-1-1.html


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

数据风云,十年变迁
DTCC 第十届中国数据库技术大会已启航!

2019年5月8日~5月10日,由IT168旗下ITPUB企业社区平台主办的第十届中国数据库技术大会(DTCC2019),将在北京隆重召开。大会将邀请百余位行业专家,就热点技术话题进行分享,是广大数据领域从业人士的又一次年度盛会和交流平台。与SACC2018类似,本届大会将采用“3+2”模式:3天传统技术演讲+2天深度主题培训。大会不仅提供超100场的主题演讲,还会提供连续2天的深度课程培训,深化数据领域的项目落地实践方案。
DTCC2019,一场值得期待的数据技术盛会,殷切地希望您报名参与!

活动入口>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP