在 ruby 中创建一对一映射时遇到问题

Facing issue with creating one to one mapping in ruby

我想与来自 3 个阵列的服务器进行一对一映射,并且阵列属于 ruby 中的不同区域。例如:

array1 = ['server1', 'server2']
array2 = ['server3', 'server4', 'server5']
array3 = ['server6', 'server7', 'server8']

在我的例子中,array2array3 的长度将始终相同。我想在 cookbook 中使用它在我想与 array2array3 进行一对一映射并仅搜索该特定服务器的服务器上执行。

例如,如果我在 server7 上执行此操作,那么它将 return server4 和 server7 仅进行一对一映射,并且始终从 array1.

中选择第一个值

我正在使用此逻辑进行一对一映射:

array1 = ['a1', 'a2', 'a3']
array2 = ['b1', 'b2', 'b3']
array1.zip(array2)

但无法使用我的说明书正在执行的主机名进行解析。

你大部分的方法是使用 zip 来构建这个数据结构,但是你的实现只能在数组的 one 中查找服务器 -无法查找所有服务器。

所以我建议使用类似以下的内容来更改它:

servers_map = array2.zip(array3).to_h.tap do |hsh|
  hsh.merge!(hsh.invert)
end

这将为您提供以下内容:

{"server3"=>"server6", "server4"=>"server7", "server5"=>"server8", "server6"=>"server3", "server7"=>"server4", "server8"=>"server5"}

如果你有一个变量 current_server 并且想得到一个 [serverA, serverB] 数组作为结果,你可以只使用:

[current_server, servers_map[current_server]]