【问题标题】:Take array and convert to a hash Ruby获取数组并转换为哈希 Ruby
【发布时间】:2013-03-02 13:24:23
【问题描述】:

我是第一次尝试这个,我不确定我是否已经完全实现了我想要的。我正在通过屏幕抓取作为数组提取数据,并希望将它们放入哈希中。

我有一个带有 :home_team 和 :away_team 列的模型,并希望将通过屏幕抓取捕获的数据发布到这些列

我希望有人可以在 rb 文件中快速运行它

require 'open-uri'
require 'nokogiri'

FIXTURE_URL = "http://www.bbc.co.uk/sport/football/premier-league/fixtures"

doc = Nokogiri::HTML(open(FIXTURE_URL))
home_team = doc.css(".team-home.teams").map {|team| team.text.strip}
away_team = doc.css(".team-away.teams").map {|team| team.text.strip}
team_clean = Hash[:home_team => home_team, :away_team => away_team]
puts team_clean.inspect

并建议这是否实际上是一个哈希,因为它似乎是一个数组,因为我看不到正在输出的哈希名称。我会期待这样的事情

{"team_clean"=>[{:home_team => "Man Utd", "Chelsea", "Liverpool"}, 
          {:away_team => "Swansea", "Cardiff"}]}

任何帮助表示赞赏

【问题讨论】:

    标签: ruby-on-rails ruby arrays hash nokogiri


    【解决方案1】:

    你实际上得到了一个哈希值。但它看起来和你想象的不一样。您希望在 Hash 中包含 Hash。

    一些需要澄清的例子:

    hash = {}
    hash.class
     => Hash 
    
    hash = { home_team: [], away_team: [] }
    hash.class
    => Hash
    hash[:home_team].class
    => Array
    
    hash = { hash: { home_team: [], away_team: [] } }  
    hash.class
    => Hash
    hash[:hash].class
    => Hash
    hash[:hash][:home_team].class
    => Array
    

    您所称的“哈希名称”永远不会“输出”。哈希基本上是具有不同索引的数组。为了澄清这一点:

    hash = { 0 => "A", 1 => "B" }
    array = ["A", "B"]
    hash[0]
    => "A"
    array[0]
    => "A"
    hash[1]
    => "B"
    array[1]
    => "B"
    

    基本上使用您额外定义的哈希,通过显式定义键来查找值的方式和位置,而数组始终使用数字索引存储它。

    【讨论】:

      【解决方案2】:

      解决办法

      team_clean = Hash[:team_clean => [Hash[:home_team => home_team,:away_team => away_team]]]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-11
        • 1970-01-01
        • 2021-01-17
        • 1970-01-01
        • 2021-10-16
        • 1970-01-01
        • 2021-11-25
        相关资源
        最近更新 更多