我应该使用散列或数组来断开链接状态吗?

时间:2013-01-08 20:32:35

标签: ruby arrays hash

我从一个方法调用返回一个链接数组,其中validate_pdf_links()返回数组:

broken_pdf_links = broken_pdf_links + validate_pdf_links()

我在具有多个链接的多个页面上执行此操作,因此其工作方式如下:

  1. 转到第页。
  2. 使用validate_pdf_links()检查该页面上的所有链接。
  3. 转到下一页。
  4. 重复。
  5. 我想知道链接断开时我所在的页面,所以我使用以下内容进行页面识别:

    page_name = @browser.title
    

    我想要一个输出:

    broken_pdf_links.each do |pdf|
    puts "The pdf link #{pdf} was broke on page #{page_name}
    

    如何组装散列或数组以包含元素并以我建议的方式检索它们?

    编辑::::::正在尝试:

    broken_pdf_links.each {|pdf| broken_pdfs = broken_pdfs.push[pdf,page_name]}
    

    存储,然后

    broken_pdfs.each do |broke_pdf|
       puts "Link #{broke_pdf[0][0]} on Page #{broke_pdf[0][1]}\n"
       pdf_index += 1
    end
    

    阅读

    但我在store命令中收到错误“TypeError:无法将Array转换为Integer”。

2 个答案:

答案 0 :(得分:1)

每页上可能有多个断开的链接。哈希在这里会很好。

broken_pdf_links = {}

broken_pdf_links.merge!(:page_name => validate_pdf_links())

broken_pdf_links.each do |k,v|
  puts "The pdf link(s) #{v} was broken on page #{k}"
end

<强>输出:

pdf链接[“fail1”,“fail2”,“fail3”]在第page_name页上被破坏

pdf链接[“fail1”]在页面other_page上被破坏

您可以进一步使用数组并对其进行格式化。

答案 1 :(得分:1)

而不是:

broken_pdf_links.each {|pdf| broken_pdfs = broken_pdfs.push[pdf,page_name]}

使用:

broken_pdfs = broken_pdf_links.map { |pdf| [pdf,page_name] }

大多数情况下,你混合了几种聚合子阵列的方法。

您可以使用更短,更直接的map或:

broken_pdfs = []
broken_pdf.links.each do |pdf|
  broken_pdfs += [pdf, page_name]
end

另一个例子是:

broken_pdfs = []
broken_pdf.links.each do |pdf|
  broken_pdfs.push([pdf, page_name])
end