【问题标题】:Parse a sequence list for a specific item and map it to its key in yaml using ruby解析特定项目的序列列表并使用 ruby​​ 将其映射到 yaml 中的键
【发布时间】:2016-11-07 16:38:38
【问题描述】:

需要编写一个 ruby​​ 脚本,该脚本将根据给定脚本的参数解析 yaml 文件。

下面是一个类似于 yaml 文件的示例:

server01:
  - mail
  - dhcp
  - dns 
server02:
  - mail
  - dhcp

希望能够像这样运行脚本,./test.rb -s mail

并让它返回在其序列列表中包含邮件的服务器列表

这可能吗?

【问题讨论】:

    标签: ruby yaml


    【解决方案1】:

    只需将'mail' 替换为正确的参数即可。我猜像ARGV[1]

    require 'yaml'
    h = YAML.load_file('config.yaml')
    h.select { |k, v| v.include?('mail') }.keys
    # => should return ["server01","server02"]
    

    【讨论】:

    • 我得到未定义的数组方法键
    • @TonyD .map(&:first) 而不是 keys 应该可以解决这个问题。你也可以collect{|k,v| k if v.include('mail)}.compact
    • @engineersmnky 谢谢!这样做!现在我的下一步是检查用户输入是否存在,然后退出或继续我最初询问的内容。谢谢!
    • 关于“未定义的方法键”错误,您必须使用非常旧的 Ruby 版本(1.8)。从 1.9 开始,select 方法返回一个散列,而不是一个数组。 Engineermnsky 的评论将在 1.8.x 中起作用。
    • @Teoulas 如果 OP 使用的是 OSX 并且版本低于 10.9 (Mavericks),那么原生 ruby​​ 是 1.8.7。这将是我的假设,因此我提供了适用于所有版本的向后兼容解决方案,但您的答案肯定是所有版本 1.9+ 的更简洁和惯用的 ruby​​ 代码
    猜你喜欢
    • 2017-04-08
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 2022-01-10
    • 2012-11-12
    • 2014-07-21
    相关资源
    最近更新 更多