【发布时间】:2015-02-13 19:00:42
【问题描述】:
我正在尝试与 Vagrant 合作,在启动 Docker 容器时执行一些自动化操作。 Vagrantfiles 本质上是 Ruby,因此我应该能够应用 Ruby 逻辑来帮助解决这个问题。
我正在阅读一个 conf.d 目录,该目录中充满了包含配置数据的 YAML 文件,然后将配置项的哈希值推送到一个数组中。完成后,我将使用 .each 遍历数组,并根据散列中某些键的值将配置应用于数组中的每个条目。这些键之一是“链接”。链接的值将与另一个键“名称”的值相关。
我基本上需要确保link => 'name' 的哈希值在name => 'value' 的哈希值之前的数组中。
输入和预期输出示例:
输入
containers = [{"name"=>"foo", "ports"=>["80:80", "443:443"], "links"=>["bar", "baz"]}, {"name"=>"bar", "ports"=>["8888:8888"]}, {"name"=>"baz","ports"=>"80:80"}]
预期输出
containers = [{"name"=>"bar", "ports"=>["8888:8888"]}, {"name"=>"baz", "ports"=>"80:80"}, {"name"=>"foo", "ports"=>["80:80", "443:443"], "links"=>["bar", "baz"]}]
最终结果是,任何带有“链接”的条目都会出现在数组中哈希的名称键与之匹配的条目之后。 (基本上是基于链接键的依赖排序。)
请注意,链接的容器可能会链接到另一个链接的容器。
这让我有点困惑,因为我知道我需要做什么,但缺乏真正弄清楚“如何做”的技术能力。 :)
提前感谢您的帮助。
【问题讨论】:
-
感谢@john-ledbetter 的编辑。忘记在此处附上正确的格式。
-
如果你只提供示例输入和预期输出会更清楚
-
编辑了问题以阐明预期的输入/输出。对不起,谢谢。
-
我建议您编辑以删除对 Vagrant、Docker 和 YAML 的引用。他们只是混淆了这个问题,(据我所知)是如何对哈希数组进行排序以实现所需的排序,即
g遵循h如果h有一个键"links"和h["links"]包括g["name"]。