2013-01-23 28 views
-1

找到下面的代碼:我們可以讓這兩個循環組合的方式來並行運行它們嗎?

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. 我想創建hash其中key will be textitem will be href
+0

誰開始了這樣一個糟糕的投票權低下的遊戲? – DoLoveSky

回答

1

您可以使用zip做到這一點:

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

你也可以做一個函數式編程風格通過提取hreftextmap

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

這樣做(可以說)更美觀但效果稍差因爲它需要迭代次數的兩倍,並創建了一些額外的數組,但除非有大量的鏈接不會成爲問題。

+0

爲什麼不'哈希[all_links.zip(all_attachment_names)]'? – Hauleth

+0

因爲您需要從數組項目 –

+0

中提取'text'和'href'屬性,然後添加2個貼圖。我更喜歡功能性編程:D – Hauleth

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

如果'map = {}是一個散列'? – DoLoveSky

+0

是的,'{}'是'Hash' – hoha

+0

爲什麼不是'Hash [all_links.zip(all_attachment_names)]'? – Hauleth

相關問題