【发布时间】:2018-07-19 07:25:01
【问题描述】:
首先让我对以下数据结构可能没有正确编写表示歉意。我在代码中动态创建了哈希值,但我不太擅长尝试表示所创建的内容。
$Sailings= @{
'Arrivals' = @{
$DynamicKey_booking_Ref = @{
'GoingTo' = 'Port1';
'Scheduled' = '09:05';
'Expected' = '10:09';
'Status' = 'Delayed'
};
'Departures' = @{
$DynamicKey_booking_Ref = @{
'ArrivingFrom' = 'Port1';
'Scheduled' = '09:05';
'Expected' = '09:05';
'Status' = 'OnTime'
};
}
}
我通常像这样访问数据。 (希望能确认我使用的结构):
$Sailings.Arrivals.PDH083.GoingTo which returns "Port1"
$Sailings.Arrivals.PDH083.Scheduled which returns "09:05"
在此示例中,PDH083 是基于预订参考动态创建的密钥。
我要做的是将此结构与另一个相同的结构进行比较,但可能具有不同的值。例如。这两个元素一样吗?
$Sailings.Arrivals.PDH083.GoingTo = "Port1"
$Output.Arrivals.PDH083.GoingTo = "Port5555"
如果它们不相同,请捕获差异以及不同的路径/键。然后在最后报告他们。
我正在努力编写的是一个递归循环,它可以走到最后一个元素,然后将其与$output 进行比较。虽然我的哈希现在已修复,但我想考虑到以后可能会在较低位置添加更多嵌套哈希的可能性。这是可以轻松完成的事情吗?
我用过
($Sailings.Arrivals.keys | ? {$Output.Arrivals.keys -notcontains $_})
显示丢失的键,但我无法理解为值执行此操作的类似/有效方法。我再次看到我可以使用.values,但它仍然是一次元素。
【问题讨论】:
-
我认为您将要编写一个查看值的函数,如果它是一个哈希表,它将调用自己,传入两个哈希表进行检查。也许通过
[ref]传递第三个参数来收集所有差异,并通过第四个参数来跟踪值的路径。 -
感谢 @TheMadTechnician 的 cmets。这就是我一直在想的。今天尝试了几次,但都没有真正奏效。等我回家后我会再去一次。很高兴能坚持到我到达那里。只是想检查一下我是否朝着正确的方向前进。
标签: powershell recursion hashtable