散列哈希:使用特定子键返回哈希值

时间:2013-07-12 14:02:44

标签: ruby arrays chef hash

我是Ruby和Chef的新手,我正在尝试编写一本菜单来重新启用启用了ACL的根文件系统。 Ohai正在使用所有挂载的文件系统填充node['filesystem']。如何专门找到node['filesystem'] node['filesystem'][:item]['mount'] == '/'下的所有项目?

3 个答案:

答案 0 :(得分:1)

您可以使用Hash#select方法:

filtered_nodes = node['filesystem'].select do |key, value|
  key == :item && value['mount'] == '/'
end

答案 1 :(得分:0)

root_filesystems = node['filesystem'].select do |k, v|
  node['filesystem'][k]['mount'] == '/'
end

答案 2 :(得分:0)

更新我刚刚意识到自己的想法。 :item不是哈希键,而是您要枚举的键的占位符。

这将为您做到这一点

selection = node['filesystem'].keys.find_all do |item|
  node['filesystem'][item]['mount'] == '/'
end

你的问题不清楚,但我认为node可能是文件系统的散列。

这将选择node的所有键,其元素[:item] ['mount']等于/

selection = node.keys.find_all do |key|
  val = node[key]
  val.key? :item and val[:item]['mount'] == '/'
end