Powershell 字典Dictionary嵌套列表List 详解

字典可以有很多个keyword, 每一个字典都可以放到列表:

这边是一个列子:

[System.Collections.Generic.List[Object]]$mList = @{};

[System.Collections.Generic.Dictionary[String,Object]]$mDic = @{};

$mDic["day"] = "0900";

$mDic["night"] = "2100";

$mList.Add($mDic);

$mDic["day"] = "1100";

$mDic["night"] = "2300";

$mList.Add($mDic);

foreach ($t in $mList){

Write-Host $t["day"]

Write-Host $t["night"]

}


这边会有一个问题,输出的value都是1100 2300:


其实在第一个$mList.Add($mDic);的时候,$mlist的value还是0900  2100,

但是二次赋值$mList.Add($mDic);的时候,$mlist的值会随$mDic的值的改变而改变,这是因为$mDic的传递方式是址传递,如果我们想要

每次传递的day 和 night不影响上一个传递,我们可以每次都create $mDic:

[System.Collections.Generic.List[Object]]$mList = @{};

[System.Collections.Generic.Dictionary[String,Object]]$mDic = @{};

$mDic["day"] = "0900";

$mDic["night"] = "2100";

$mList.Add($mDic);

[System.Collections.Generic.Dictionary[String,Object]]$mDic = @{};

$mDic["day"] = "1100";

$mDic["night"] = "2300";

$mList.Add($mDic);

foreach ($t in $mList){

    Write-Host $t["day"]

    Write-Host $t["night"]

}


当然,这样写很不合规范,实际项目都是建议用function方式复制$mDic

另外这边需要注意[System.Collections.Generic.Dictionary[String,Object]]$mDic = @{};的[String,Object]

因为字典的key是string类型,value是object类型(因为我这边某些value是数字或者字符串类型),然后 $mList 因为传递进去的不是String类型, 传进去的是字典类型,我们可以写Object类型 :[System.Collections.Generic.List[Object]]$mList = @{};

你可能感兴趣的:(Powershell 字典Dictionary嵌套列表List 详解)