我有哈希值:
my_hash = {"host_names"=>["batman", "robin"], "files"=>["file1", "file2", "file3"]}
我需要遍历每个主机名,然后从每个主机中提取相同的日志。
除了:
my_hash.each do |k, v|
k["host_names].each do |hostname|
k["log"].each do |log|
get_log_file(host, log)
end
end
end
有更有效的方法吗?
提前谢谢。
答案 0 :(得分:3)
你可以这样做:
my_hash = {"host_names"=>["batman", "robin"],
"files"=>["file1", "file2", "file3"]}
def get_log_file(h,f)
puts "processing file #{f} for #{h}"
end
my_hash["host_names"].product(my_hash["files"]).each {|h,f| get_log_file(h, f)}
#=> processing file file1 for batman
# processing file file2 for batman
# processing file file3 for batman
# processing file file1 for robin
# processing file file2 for robin
# processing file file3 for robin
答案 1 :(得分:1)
嗯,首先,你可以摆脱外圈:
my_hash['host_names'].each do |host|
my_hash['files'].each do |file|
get_log_file(host, file)
end
end
它真的没有效率,但更清洁一点。无论如何,我认为这将是两个循环。
答案 2 :(得分:0)
我不知道你为什么要尝试迭代哈希的密钥,然后在每个密钥上调用["某些东西"]。这似乎是错的。
hostnames = my_hash["host_names"]
files = my_hash["files"]
hostnames.each do |hostname|
files.each do |file|
get_log_file host, file
end
end