PowerShell:组合两个哈希表

Posted

技术标签:

【中文标题】PowerShell:组合两个哈希表【英文标题】:PowerShell: Combine two hash tables 【发布时间】:2013-06-06 05:47:30 【问题描述】:

我有两个从两个不同 XML 文件中的数据创建的哈希表。我想做的是根据两个表中的共同值将这两个表组合成一个哈希表。

Inv 哈希:

    $invHash = $invXML.InventoryDto.ProductInventoryItem.SkuInventoryItem | 
select @ L = 'SkuID'; E =  $_.SkuId  , @ L = 'SkuStatusCode'; 
E =  if ($_.SkuStatusCode -eq 'Active')  'True'  else  'False'  , 
@ L = 'QuantityOnHand'; E =  $_.QuantityOnHand  

$invHash 的示例内容:

SkuID    SkuStatusCode    QuantityOnHand 
-----    -------------    --------------  
1828     True             441 
3022     True             325 
2981     True             214 
2989     True             842 

价格哈希:

    $priceHash = $priceXML.PricingDto.ProductPricingItem.SkuPricingItem | 
select @ L = 'SkuID'; E =  $_.SkuId  , @ L = 'RegularPrice'; 
E =  $_.PriceGroup.RegularPrice  , @ L = 'CurrentPrice'; 
E =  $_.PriceGroup.CurrentPrice   

$priceHash 的示例内容:

 SkuID    RegularPrice     CurrentPrice 
 -----    -------------    --------------  
 1828     49.99            48.99
 3022     25               19.99
 2981     45               39.99
 2989     28               18.99

$invpriceHash 的所需内容:

SkuID    SkuStatusCode    QuantityOnHand  RegularPrice     CurrentPrice   
-----    -------------    --------------  --------------  --------------
1828     True             441             49.99            48.99
3022     True             325             25               19.99
2981     True             214             45               39.99
2989     True             842             28               18.99

【问题讨论】:

在我看来,您正在尝试执行“内存中连接”。这篇博文blogs.msdn.com/b/powershell/archive/2012/07/13/join-object.aspx 有一个全面的解决方案。 【参考方案1】:

给定:

f1.csv 是:

SkuID,SkuStatusCode,QuantityOnHand
1828,True,441 
3022,True,325 
2981,True,214 
2989,True,842 

f2.csv 是:

SkuID,RegularPrice,CurrentPrice
1828,49.99,48.99
3022,25,19.99
2981,45,39.99
2989,28,18.99

试试这个牵强的解决方案,不如join-object,因为你需要知道属性。您还必须小心 + 运算符在 $a$b 之间,这不是可交换的,它会更改组顺序:

   $a = Import-Csv C:\temp\f1.csv
   $b  = Import-Csv C:\temp\f2.csv
   $b + $a | Group-Object -Property skuId  | 
% $x= New-Object -TypeName psCustomObject -Property 
@SkuID=$_.name;RegularPrice=$_.group[0].RegularPrice;
CurrentPrice=$_.group[0].CurrentPrice;
SkuStatusCode=$_.group[1].SkuStatusCode;QuantityOnHand=$_.group[1].QuantityOnHand;
 $x

对我来说它给了:

QuantityOnHand : 441 
RegularPrice   : 49.99
SkuStatusCode  : True
SkuID          : 1828
CurrentPrice   : 48.99

QuantityOnHand : 325 
RegularPrice   : 25
SkuStatusCode  : True
SkuID          : 3022
CurrentPrice   : 19.99

QuantityOnHand : 214 
RegularPrice   : 45
SkuStatusCode  : True
SkuID          : 2981
CurrentPrice   : 39.99

QuantityOnHand : 842 
RegularPrice   : 28
SkuStatusCode  : True
SkuID          : 2989
CurrentPrice   : 18.99

【讨论】:

这很棒!没有意识到我实际上是在使用对象而不是哈希。一旦我明白这让这变得更加合乎逻辑。

以上是关于PowerShell:组合两个哈希表的主要内容,如果未能解决你的问题,请参考以下文章

在 PowerShell 中合并哈希表:如何?

sql Powershell Migration工具http://stackingcode.com/blog/2011/10/12/database-migrations-with-powershel

powershell Powershell函数从文件中读取哈希表文本表示并将其转换为哈希表对象

cURL 到 PowerShell - 哈希表

powershell 来自https://stackoverflow.com/questions/31051103/how-to-export-a-class-in-powershell-v5-mod

PowerShell初级篇●Powershell数组和哈希表