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

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

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

def facts 
array=[]

doc = Nokogiri::HTML(URI.open("https://www.funfactsabout.net/plant-facts/"))
doc.css("ul.facts-list li").each do |list|
array.push(list.text)
end
return array
end

我班上的一个方法是

def more
    input_prompt = "\n\n Enter a number between 1-42 for a random plant fact, or type 'leave' to exit: \n\n"
input = nil
    while true
      puts input_prompt
      input = gets.strip
      if input.to_i > 0 && input.to_i < facts.length + 1
       puts facts[input.to_i - 1]
      elsif input == "leave"
        puts goodbye
        return
      else
        puts "Sorry, I didn't understand that." 

     end
   end
end
ff29svar

ff29svar1#

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

class RandomFacts
  attr_reader :name

  def initialize(name)
    @name = name
  end

  def to_a 
    document.css("ul.facts-list li").map do |list|
      list.text
    end
  end

  private

  def document
    Nokogiri::HTML(url)
  end

  def url
    URI.open("https://www.funfactsabout.net/#{name}-facts/")
  end
end

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

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

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

facts = {
  "science" => RandomFacts.new("science").to_a,
  "plant" => RandomFacts.new("plant").to_a
}

facts["plant"][1]
facts["science"][42]

相关问题