2013-03-14 38 views
1

我想这是第一次,我不知道我有相当成就,我想。我通过一个屏幕抓取数据并将其放入哈希中。以数组转换为散列红宝石

我有列的模型: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"}]} 

任何帮助赞赏

回答

1

这里是解决

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

你实际上得到一个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名” 正如你所说的,是从来没有 “outputed”。哈希基本上是一个具有不同索引的数组。与哈希你额外定义,如何以及在何处被显式定义的关键,而一个数组总是以数字索引存储它找到值

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

基本上是:要澄清这一点。

+0

感谢的例子和澄清 – Richlewis 2013-03-14 09:34:54