powershell 将键值对列表转换为哈希表

fquxozlt  于 2023-01-26  发布在  Shell
关注(0)|答案(6)|浏览(154)

将List转换为Hashtable的最佳方法是什么?
假设我有一个类似("Key",$value,"Key2",$value2)的列表
将其转换为Hashtable的最短语法是什么?

unftdfkk

unftdfkk1#

请尝试以下操作

$table = new-object System.Collections.Hashtable
for ( $i = 0; $i -lt $list.Length; $i += 2 ) {
  $table.Add($list[$i],$list[$i+1]);
}
wf82jlnq

wf82jlnq2#

Function ConvertTo-Hashtable($list) {
    $h = @{}

    while($list) {
        $head, $next, $list = $list
        $h.$head = $next
    }

    $h
}

ConvertTo-Hashtable ("Key",1,"Key2",2)
j9per5c4

j9per5c43#

如果列表由NameValuePair对象组成,则可以用途:

Function ConvertListOfNVPTo-Hashtable($list) {
    $h = @{}
    $list | ForEach-Object {
        $h[$_.Name] = $_.Value
    }
    return $h
}
lvmkulzt

lvmkulzt4#

$h = @{}  
0..($l.count - 1) | ? {$_ -band 1} | % {$h.Add($l[$_-1],$l[$_])}  

$h = @{}  
0..($l.count - 1) | ? {$_ -band 1} | % {$h.($l[$_-1]) = $l[$_]}  

$h = @{}  
$i = 0  
while ($i -lt $l.count) {$h.Add($l[$i++],$l[$i++])}
blmhpbnm

blmhpbnm5#

不如这样:

$ht = @{}
$key = "";
("Key",5,"Key2",6) | foreach `
{  
    if($key)  
    {
        $ht.$key = $_; 
        $key=""; 
    } else 
    {$key=$_}   
}
6ju8rftf

6ju8rftf6#

function Select-Hashtable {
        [CmdletBinding()]
        param(
            [Parameter(ValueFromPipeline)]
            [PSObject[]]$InputObject,
            [Parameter(Mandatory)]
            [string]$Property
       )
       begin { $hashtable = [Hashtable]::new() }
       process { $InputObject | %{ $hashtable[$_."$Property"] = $_} }
       end { $hashtable }
    }

那么(一个毫无意义的例子):

$items = Get-ChildItem -Path $path | Select-Hashtable -Property Name
    $documents = $items['Documents']

相关问题