2014-10-01 169 views
0

有没有办法将两个数组组合到一个哈希表?将两个数组组合成一个哈希表

$Name = Get-ChildItem C:\Users | Select-Object Name 
$CreationTime = Get-ChildItem C:\Users | Select-Object CreationTime 

$Table = New-Object psobject 

foreach ($item in $Name) { 
    foreach ($item2 in $CreationTime) { 

    Add-Member -InputObject $Table -MemberType NoteProperty -Name $item -Value $item2 } } 

如果我只是打印出$ item和$ item2,我多次获得每个结果,我知道这是因为嵌套的foreach。

上面的例子不是很好,我acutally需要这个导入不同的csv文件,并创建一个哈希表来再次导出它们。

+0

为什么你不只是使用'Get-ChildItem C:\ Users |选择对象名称,创建时间?或者,这就是为什么你的意思是一个坏榜样。向我们展示你实际上在做什么可能会更好。 – Matt 2014-10-01 15:49:08

+0

是的,就像我在底部所说的那样,我想将两个csv文件合并为一个散列表。 – mt7 2014-10-01 15:57:03

+0

这两个文件共享一个公用密钥还是可以将它们合并为一行? – Matt 2014-10-01 16:02:35

回答

1

有一个for循环是你迭代通过第一个数组与索引。假设两个数组中的相同索引给出正确的对,请将该对添加到散列表。无需嵌套循环。

一些伪代码:

for ($i = 0; $i < $Name.length; $i++) { 
    Add-Member -Name $Name[$i] -Value $CreationTime[$i] 
} 
+0

感谢您的提示,像这样的东西正在为我工​​作: – mt7 2014-10-01 18:32:22

0

我要求会是这个样子:

$Name = Get-ChildItem C:\Users | Select-Object Name 
$CreationTime = Get-ChildItem C:\Users | Select-Object CreationTime 
$Table = New-Object psobject 
$i = 0 

do { 

Add-Member -InputObject $Table -MemberType NoteProperty -Name $Name[$i].Name -Value $CreationTime[$i].CreationTime 

$i++ } 
while ($i -ne $name.Length) 

$Table 

然而,这种解决方案更像是我想要的东西:

$Name = Get-ChildItem C:\Users | Select-Object Name 
$CreationTime = Get-ChildItem C:\Users | Select-Object CreationTime 
$TableData [email protected]() 
$i = 0 

do { 

$Table = New-Object psobject 

Add-Member -InputObject $Table -MemberType NoteProperty -Name "FolderName:" -Value $Name.Name[$i] 
Add-Member -InputObject $Table -MemberType NoteProperty -Name "Creation Time:" -Value  $CreationTime.CreationTime[$i] 

$TableData += $Table 

$i++ } 
while ($i -ne $name.Length) 

$TableData | Export-csv -Delimiter ";" -Path $PSScriptRoot\out.csv -NoTypeInformation 

对不起因为不具体!有没有更简单的方法来做到这一点?