Hash Puppet:使用相同的键合并哈希
我有一个数组Hash Puppet:使用相同的键合并哈希,hash,merge,key,puppet,Hash,Merge,Key,Puppet,我有一个数组 $servers = [192.168.1.1, 192.168.1.2] 应将其转换为具有以下形式散列的数组(具有散列并作为键“hostname”和数组服务器的实际值的数组): 我尝试了以下方法: $servers_hash = $servers.reduce({}) |$servermerge, $serverip| { $servermerge + { 'hostname' => $serverip } } $servers_array = $servers.
$servers = [192.168.1.1, 192.168.1.2]
应将其转换为具有以下形式散列的数组(具有散列并作为键“hostname”和数组服务器的实际值的数组):
我尝试了以下方法:
$servers_hash = $servers.reduce({}) |$servermerge, $serverip| {
$servermerge + { 'hostname' => $serverip }
}
$servers_array = $servers.reduce([]) |$servermerge, $serverip| {
$servermerge + { 'hostname' => $serverip }
}
问题是,如果具有相同密钥的两个哈希与+
合并,则第一个哈希将被覆盖。所以只剩下{hostname=>192.168.1.2}
更新:和以下内容:
$servers_hash = $servers.reduce({}) |$servermerge, $serverip| {
$servermerge + { 'hostname' => $serverip }
}
$servers_array = $servers.reduce([]) |$servermerge, $serverip| {
$servermerge + { 'hostname' => $serverip }
}
它给出了:
[[hostname,192.168.1.1],[hostname,192.168.1.2]
解决方案:
如果使用
+
,则代码的右侧将被铸造到一个数组中,与以前一样。使用解决方案:
如果使用+
,则代码的右侧将被铸造到一个数组中,与以前一样。使用由于您想要的结果与输入中的条目一样多,因此最简单(也是最好)的方法是使用map()
函数:
$servers_array = $servers.map |$ip| { { 'hostname' => $ip } }
虽然生成新值的迭代的一般形式是reduce()
,但它稍微复杂一些,因为您必须构造生成的数组。在puppet中执行此操作时,每个追加都带有,因为您想要的结果与输入中的条目一样多。最简单(也是最好)的方法是使用map()
函数:
$servers_array = $servers.map |$ip| { { 'hostname' => $ip } }
虽然生成新值的迭代的一般形式是reduce()
,但它稍微复杂一些,因为您必须构造生成的数组。在puppet中执行此操作时,每个追加都带有,我认为大多数语言不允许使用相同键的哈希/映射/字典,puppet就是其中之一。你可能需要一个不同的结构来实现这一点。这是有道理的,但在我看来,具有几乎相同哈希值的数组应该没有问题?如果你将哈希值放在数组中,你的逻辑将与+
一起工作-[{'hostname=>$serverip}]
-但我在这里给出了你应该做的真正答案:(使用映射()
函数而不是reduce()
我认为大多数语言不允许使用相同键的哈希/映射/字典,Puppet就是其中之一。您可能需要不同的结构来实现这一点。这是有道理的,但在我看来,使用几乎相同哈希的数组应该没有问题?如果您将哈希放入数组-,您的逻辑将与+
一起工作{'hostname=>$serverip}]
-但是我在这里发布了您应该做什么的真正答案:(使用map()
函数而不是reduce()