【发布时间】:2016-02-22 17:34:38
【问题描述】:
在 Union and Intersection in PowerShell? 中描述了用于数组集合操作的酷单行。
我想用哈希表来做这件事,并有一个使用字典键集的解决方案。为了扩展到值,我使用 for 循环遍历键的交集并将值复制到新的结果哈希表。这看起来不干净。
进一步的研究表明 GetEnumerator 的解决方案也不是干净的恕我直言。
如何用简洁漂亮的单行代码替换臃肿的 for 循环或枚举器?
源码如下:
http://paste.ubuntu.com/13362425/
# import csv
$a = Import-Csv -Path A.csv -Delimiter ";" -Header "Keys","Values"
$b = Import-Csv -Path B.csv -Delimiter ";" -Header "Keys","Values"
# Make nice hashtables for further use
$AData = @{}
foreach($r in $a)
{ $AData[$r.Keys] = $r.Values }
$BData = @{}
foreach($r in $b)
{ $BData[$r.Keys] = $r.Values }
# Set difference to find missing entries
$MissingA = $AData.Keys | ?{-not ($BData.Keys -contains $_)}
# I don't know how to do set-operations on hashtables yet. So use keysets and copy data (lame!)
$MissingAData = @{}
foreach($k in $MissingA)
{
$MissingAData[$k] = $AData[$k]
}
# Intersection
$Common = $AData.Keys | ?{$BData.Keys -contains $_}
【问题讨论】:
-
您是只对“值”感兴趣还是对整个键值对感兴趣?
-
整个键值对
标签: powershell