我们可以将这两个循环组合方式并行运行吗?

时间:2013-01-23 22:13:06

标签: ruby

查找以下代码:

all_links = driver.find_elements(:xpath,"//fieldset[contains(@class,'attachmentTable')]/table/tbody/tr/td/a")
all_attachment_names = driver.find_elements(:xpath,"//fieldset[contains(@class,'attachmentTable')]/legend")

all_links.each do|link|

href = link.attribute("href").strip
puts href
end

all_attachment_names.each do |name|

text = name.attribute("text")
puts text

end
  1. 我们可以使这两个循环组合方式运行它们parallel吗? 只要loop count都相同。
  2. 我想在hashkey will be text
  3. 中创建item will be href

2 个答案:

答案 0 :(得分:1)

map = {}
all_attachment_names.zip(all_links) do |a, l|
    map[a] = l
end

答案 1 :(得分:1)

您可以使用zip执行此操作:

returned_hash = {}
all_links.zip(all_attachment_names) do |link, name|
  returned_hash[name.text] = link.attribute("href").strip
end

您也可以通过href提取textmap,以功能性编程风格完成此任务:

hrefs = all_links.map{|link| link.attribute("href").strip}
names = all_attachment_names.map{|name| name.text}
returned_hash = Hash[names.zip(hrefs)]

这样做(可以说)更美观但效率更低,因为它需要两倍的迭代次数,并创建了一些额外的数组,但除非你有大量的链接不会成为问题。< / p>