• 哈希表(Hash)的应用


    $hs=@() #定义数组

    $hs=@{} #定义Hash表,使用哈希表的键可以直接访问对应的值,如 $hs["王五"] 或者 $hs.王五 的值为 75

    $hs=@''@ #定义文本字符串

    1 $hs = @'
    2 张三
    3 4 12岁
    5 '@

    ################################

    Hash表的新建、修改、删除:

     1 #新建Hash表
     2 $rs=@{ Name="Lily";score=90 ; Age=20 }
     3 $rs
     4 
     5 $rs = @{}
     6 $rs.name="Lily"
     7 $rs.score=90
     8 $rs
     9 
    10 #添加键值
    11 $rs.age=20
    12 $rs
    13 
    14 #删除键值
    15 $rs.remove("age")
    16 $rs

    Hash表嵌套:

     1 $infors = @{}
     2 $infors.pc1=@{cpu='intel';
     3         mem='4GB'}
     4         
     5 $infors.pc2=@{cpu='amd';
     6         mem='2GB'} 
     7         $infors.pc2.cpu
     8 
     9 #取pc1的值        
    10 $infors.pc1
    11 $infors["pc1"]

    取Hash表中的值:

    遍历Hash表:

    Hash表中的内容不能直接被当做对象来使用,需要进行转换

    1 #定义Hash表
    2 $hash=@{"name"="ff"}
    3 $hash.Add("dd","fffff")

    遍历Hash表:

     1 #方法一:
     2 foreach($obj in $hash.Keys)
     3 {
     4     $obj
     5     $hash[$obj]
     6 }
     7 
     8 #方法二:
     9 foreach($obj in $hash)
    10 {
    11     $obj.GetEnumerator()|%{$_.name;$_.value}
    12 }
    13 
    14 #方法三(复制到数组):
    15 $array=New-Object System.Object[] -ArgumentList $hash.Count
    16 $hash.CopyTo($array,0)
    17 $array

    ################################

    举例:使用Hash表取出分数相同的学生

    文件cc.txt内容如下:

    李一 93
    王二 83
    王三 93
    李四 60
    王五 75
    马六 61
    孙七 75
    刘八 75

    将文件cc.txt中的内容保存到Hash表中:

    1 $hs=@{}
    2 Get-Content d:cc.txt | ForEach-Object {
    3 $line = $_ -split " "
    4  $hs[$line[0]]= $line[1]
    5 }
    6 $hs

    结果如下:

    通过 group-object 对成绩分组:

    1  $hs|%{$_.getenumerator()|group value|?{$_.count -gt 1}|%{$_.group}}

    判断Hash表中是否存在某个值:

    $hs.contains()

    格式化输出:

    1 #改变列标题为Name,所有ProcessName输出为大写格式,下面两种写法输出结果相同:
    2 get-process|select id,@{Label="Name";Expression={@($_.Processname.toupper())}}|ft -AutoSize
    3 get-process|select id,@{Label="Name";Expression={$_.Processname.toupper()}}|ft -AutoSize

    #将ProcessName列标题名称改为Name
    get-process|select id,@{Label="Name";Expression="ProcessName"}

    参考:http://www.pstips.net/powershell-using-hash-tables.html #创建Hash表

         http://www.pstips.net/powershell-convert-hashtable-to-object.html #将Hash表转换为对象

         http://www.cnblogs.com/fmyuan2000/archive/2010/04/22/1717952.html #遍历Hash表

  • 相关阅读:
    C#之正则表达式、异常处理和委托与事件
    C#之interface接口
    C#之类与对象
    C#第一次的Hello World
    第一次用博客
    用Visual Studio 2012+Xamarin搭建C#开发Andriod的环境
    cocos2dx 3.x for lua "异步加载"实现过程
    cocos2dx 3.x c++代码打包给lua调用过程(mac)
    cocos2dx 3.x lua 网络加载并且保存资源(unix、linux)
    path类和directory类对文件的路径或目录进行操作
  • 原文地址:https://www.cnblogs.com/dreamer-fish/p/4166969.html
Copyright © 2020-2023  润新知