【发布时间】:2020-09-28 13:45:03
【问题描述】:
我有一个数组
$servers = [192.168.1.1, 192.168.1.2]
应将其转换为具有以下形式的散列的数组(具有散列的数组并作为键“主机名”和数组服务器的实际值):
[
{ hostname => 192.168.1.1 }
{ hostname => 192.168.1.2 }
]
我尝试了以下方法:
$servers_hash = $servers.reduce({}) |$servermerge, $serverip| {
$servermerge + { 'hostname' => $serverip }
}
这样做的问题是,如果两个具有相同键的哈希与 + 合并,第一个会被覆盖。所以只剩下{ hostname => 192.168.1.2 }了。
更新:以及以下内容:
$servers_array = $servers.reduce([]) |$servermerge, $serverip| {
$servermerge + { 'hostname' => $serverip }
}
给出:[[hostname, 192.168.1.1], [hostname, 192.168.1.2]]
【问题讨论】:
-
我不相信大多数语言都允许哈希/映射/字典具有相同的键,而 Puppet 就是其中之一。为此,您可能需要不同的结构。
-
有道理,但哈希值几乎相同的数组在我看来应该没问题?
-
如果您将哈希放入数组中 -
[ { 'hostname => $serverip}],您的逻辑将适用于+- 但我在这里发布了您应该做什么的真正答案:stackoverflow.com/a/64149583/327930(使用 @987654331 @函数而不是reduce()