ruby - 如何使用“直到”循环“放置”数组中的项目数列表
问题描述
我正在使用循环和计数器来列出一个编号的项目列表。它在 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
解决方案
def list_products
@product_names.each_with_index do |list_item, i|
puts "#{i} #{list_item}"
end
end
编辑:感谢铁皮人的反馈。使用您当前的代码,您正在循环@product_names
一次,until
并且在您正在循环的内部@product_names
使用.each
. 例如,如果@product_names.length == 3
,您将打印3 * 3 == 9
时间!
由于您只需要循环@product_names
一次,因此请选择until
或.each
。我上面的示例使用.each
,这是一个使用示例until
:
i = 1
until @product_names.length < i do
puts "#{i} #{@product_names[i-1]}"
i += 1
end
推荐阅读
- if-statement - Tableau LOD 找出每个字段值的第一个日期
- r - 在 R 包构建中使用 utils.R
- python - 是否可以根据单元格的前五个字符匹配数据帧的行?
- c# - Blazor Wasm 发送邮件抛出异常 System.PlatformNotSupportedException: System.Net.Dns:GetHostByName 在此平台上不受支持
- javascript - 为什么在 useReducer 钩子中使用 switch 语句来管理状态?
- java - android.widget.LinearLayout 无法转换为 android.support.v7.widget.RecyclerView
- c - 将字符串传递给函数 (selectionSort),显示错误:从不兼容的指针类型传递 'selectionSort' 的参数 1
- discord - 从消息中获取用户对象
- go - Mosquitto 订阅者收到额外消息
- docker - 为简单的 Golang 应用程序构建映像时,缺少 go.mod 文件