如何使用'until'循环'放入'数组中的项目的数字列表

问题描述 投票:0回答:1

我正在使用循环和计数器来列出编号的项目列表。它一次将所有项目都列在1以下,然后2是又一轮所有项目的列表。

while循环不起作用,我认为until更好。我也将counter移到了第一个迭代之外,但这也不起作用。

require 'pry'
require 'rubygems'
require 'open-uri'
require 'nokogiri'

class KefotoScraper::CLI
  def initialize
    @product_names = []
    @page_url = "https://kefotos.mx/"
  end

  def call
    puts "These are the services that Kefoto offers:"
    list_products
  end

  private

  def home_html
    Nokogiri::HTML(open(@page_url))
  end

  def service_names
    @service_names = home_html.css(".nav-link").map do |link|
      link['href'].to_s.gsub(/.php/, "")
    end

    @service_names.each do |pr|
      @product_names << pr
    end

    @product_names
  end

  def list_products
    i = 1
    n = 0

    until @product_names.length < n do
      @product_names.each {|list_item| puts "#{i} #{list_item}"}
      i += 1
      n += 1
    end
  end

  def service_links
    @service_links ||= home_html.css(".nav-item").map { |link| link['href'] }
  end
end

列表会重复一遍又一遍。

[3] pry(#<KefotoScraper::CLI>)> @product_names
=> ["foto-enmarcada", "impresion-fotografica", "photobooks", "impresion-directa-canvas", "impresion-acrilico", "fotoregalos"]
[4] pry(#<KefotoScraper::CLI>)> list_products
1 foto-enmarcada
1 impresion-fotografica
1 photobooks
1 impresion-directa-canvas
1 impresion-acrilico
1 fotoregalos
2 foto-enmarcada
2 impresion-fotografica
2 photobooks
2 impresion-directa-canvas
2 impresion-acrilico
2 fotoregalos
ruby loops nokogiri
1个回答
2
投票
def list_products
  @product_names.each_with_index do |list_item, i|
    puts "#{i} #{list_item}"
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.