如何遍历数组并按关键字存储到新数组中

如何解决如何遍历数组并按关键字存储到新数组中

我目前有一种方法可以从网站上抓取数据并将该信息存储在一个数组中,以便稍后通过其索引(随机给用户)随机调用。我想更进一步,遍历这个数组并创建新数组,其中数据由特定关键字存储,用户可以在其中指定他们是否想要有关树木、花卉或食物的事实。

我该如何编码?我需要创建一个新类吗?或方法?我是否需要定义要在另一种方法中调用的数组名称以再次迭代?有什么有效的方法可以做到这一点。

我当前存储在数组中的刮刀是

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

解决方法

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

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]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?