---------【概述】---------
哈希表,即键值对。键不能有重复。
对象为: System.Collections.Hashtable。
手册在: https://docs.microsoft.com/zh-cn/dotnet/api/system.collections.hashtable?view=netframework-4.7.2
常用的场景是,在数组里存哈希表。
如: $数组a = $哈希a, $哈希b
哈希表里也可以存数组。即哈希表某个键的值,是由数组构成。
如: $哈希a=@{键名1=1,'ps传教士原创分享',(get-date);键名2=2,'a',(get-date)}
哈希表中的键名是无序的。但.net也有,按键名排序的哈希表,SortedDictionary。
SortedDictionary在每次插入、删除后都会排序。而排序操作会加速读取,减速写入。使用场景是读多写少。
通常我们不用SortedDictionary。而是用哈希表,在需要排序的时候,用 [Ordered]$哈希a 来即刻排序。
哈希表内,含有元素最大值,默认为21亿,即int32::max。再增大的话,需要大内存,和调整powershell.exe的.appconfig

还有一种,用于并发的,线程安全型哈希表。
对象为: System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue>
手册在: https://docs.microsoft.com/zh-cn/dotnet/api/system.collections.concurrent.concurrentdictionary-2?view=netframework-4.7.2哈希表性能:
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()
#$键名数组 返回---> 吼,哈,嘿 嘿
foreach ($temp in $键名数组)
{
Write-Host $temp
}
$键值数组 = $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#没有重复就插入,有重复就加一。
foreach ($键名 in $含有重复的文本文件)
{
if ($hash.ContainsKey($键名))
{
$hash[$键名] = $hash[$键名] + 1
}
else
{
$null = $hash.add($键名,1)
}
}
---【哈希嵌套】---
$麻将牌 = @{
'万' = @{w=1}
'饼' = @{b=2}
'条' = @{t=3}
'字' = @{z=4}
#原创 2018-07-01}
$麻将牌
$麻将牌.万
$麻将牌.万.w
ps传教士点评:
数组用的最多,哈希表也比较常用。
哈希的儿子,可以是哈希,(哈希表包含哈希表)
哈希的儿子,可以是数组,
数组的儿子,和可以是哈希,
子子孙孙无穷匮也!
哈希表,即键值对。键不能有重复。
对象为: System.Collections.Hashtable。
手册在: https://docs.microsoft.com/zh-cn/dotnet/api/system.collections.hashtable?view=netframework-4.7.2
常用的场景是,在数组里存哈希表。
如: $数组a = $哈希a, $哈希b
哈希表里也可以存数组。即哈希表某个键的值,是由数组构成。
如: $哈希a=@{键名1=1,'ps传教士原创分享',(get-date);键名2=2,'a',(get-date)}
哈希表中的键名是无序的。但.net也有,按键名排序的哈希表,SortedDictionary。
SortedDictionary在每次插入、删除后都会排序。而排序操作会加速读取,减速写入。使用场景是读多写少。
通常我们不用SortedDictionary。而是用哈希表,在需要排序的时候,用 [Ordered]$哈希a 来即刻排序。
哈希表内,含有元素最大值,默认为21亿,即int32::max。再增大的话,需要大内存,和调整powershell.exe的.appconfig

还有一种,用于并发的,线程安全型哈希表。
对象为: System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue>
手册在: https://docs.microsoft.com/zh-cn/dotnet/api/system.collections.concurrent.concurrentdictionary-2?view=netframework-4.7.2哈希表性能:
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()
#$键名数组 返回---> 吼,哈,嘿 嘿
foreach ($temp in $键名数组)
{
Write-Host $temp
}
$键值数组 = $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#没有重复就插入,有重复就加一。
foreach ($键名 in $含有重复的文本文件)
{
if ($hash.ContainsKey($键名))
{
$hash[$键名] = $hash[$键名] + 1
}
else
{
$null = $hash.add($键名,1)
}
}
---【哈希嵌套】---
$麻将牌 = @{
'万' = @{w=1}
'饼' = @{b=2}
'条' = @{t=3}
'字' = @{z=4}
#原创 2018-07-01}
$麻将牌
$麻将牌.万
$麻将牌.万.w
ps传教士点评:
数组用的最多,哈希表也比较常用。
哈希的儿子,可以是哈希,(哈希表包含哈希表)
哈希的儿子,可以是数组,
数组的儿子,和可以是哈希,
子子孙孙无穷匮也!