网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月29日漏签0天
powershell吧 关注:1,171贴子:1,798
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 0回复贴,共1页
<<返回powershell吧
>0< 加载中...

ps第11课:尽解powershell哈希表

  • 只看楼主
  • 收藏

  • 回复
  • pck6636
  • 贡士
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
---------【概述】---------
哈希表,即键值对。键不能有重复。
对象为: 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传教士点评:
数组用的最多,哈希表也比较常用。
哈希的儿子,可以是哈希,(哈希表包含哈希表)
哈希的儿子,可以是数组,
数组的儿子,和可以是哈希,
子子孙孙无穷匮也!


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 0回复贴,共1页
<<返回powershell吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示