如何迭代数组并按关键字存储到新数组中

tquggr8v  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(470)

我目前有一种方法,可以从网站上抓取数据,并将这些信息存储在一个数组中,稍后由其索引随机调用(对用户随机)。我想更进一步,迭代这个数组,并创建新的数组,其中数据通过特定的关键字存储,用户可以指定他们是否想要关于树木、花卉或食物的事实。
我如何编写代码?我需要创建一个新类吗?还是方法?我是否需要定义在另一个方法中调用的数组名以再次迭代?这是一种有效的方法。
我当前存储在数组中的刮板是

  1. def facts
  2. array=[]
  3. doc = Nokogiri::HTML(URI.open("https://www.funfactsabout.net/plant-facts/"))
  4. doc.css("ul.facts-list li").each do |list|
  5. array.push(list.text)
  6. end
  7. return array
  8. end

我班上的一个方法是

  1. def more
  2. input_prompt = "\n\n Enter a number between 1-42 for a random plant fact, or type 'leave' to exit: \n\n"
  3. input = nil
  4. while true
  5. puts input_prompt
  6. input = gets.strip
  7. if input.to_i > 0 && input.to_i < facts.length + 1
  8. puts facts[input.to_i - 1]
  9. elsif input == "leave"
  10. puts goodbye
  11. return
  12. else
  13. puts "Sorry, I didn't understand that."
  14. end
  15. end
  16. end
ff29svar

ff29svar1#

我会为此创建一个类,比如

  1. class RandomFacts
  2. attr_reader :name
  3. def initialize(name)
  4. @name = name
  5. end
  6. def to_a
  7. document.css("ul.facts-list li").map do |list|
  8. list.text
  9. end
  10. end
  11. private
  12. def document
  13. Nokogiri::HTML(url)
  14. end
  15. def url
  16. URI.open("https://www.funfactsabout.net/#{name}-facts/")
  17. end
  18. end

在类中,您根据事实名称构造url,如下所示

  1. RandomFacts.new("plant").to_a
  2. RandomFacts.new("science").to_a

然后,您必须提示用户事实和数字,并可以生成例如散列

  1. facts = {
  2. "science" => RandomFacts.new("science").to_a,
  3. "plant" => RandomFacts.new("plant").to_a
  4. }
  5. facts["plant"][1]
  6. facts["science"][42]
展开查看全部

相关问题