2016-12-16 25 views
4

我正在抓取的內容包含一些空白元素。如果沒有數據(最好)或者之後做一些手術並且完全刪除包含空白的散列,我需要停止設置變量。Ruby:刪除哈希數組中的空括號

這裏是我刮代碼:

eqs = [] 

nokogiri_page.xpath('//table/tr').each do |row| 
    date = row.xpath('td[1]/a/text()').text.strip 
    location = row.xpath('td[5]/text()').text.strip 

    eqs.push(
    date: date, 
    location: location 
) 
end 

有些是空白,我不知道哪個先。所以,我想遍歷數組在與刪除空白值:

eqs.each do |event| 
    event.reject! {|k, v| v.empty? || v=="  " || v=="" } 
end 

這成功地消除空白鍵和值,但我仍然只剩下空的大括號...

輸出:

[ 
{}, 
{}, 
{}, 
{ 
    :date=>"2016-12-14 13:19:55", 
    :location=>"Myanmar" 
}, 
{ 
    :date=>"2016-12-13 17:57:04", 
    :location=>"Northern Sumatra, Indonesia" 
} 
] 

我想徹底擺脫空的哈希!任何人都知道我在這裏錯了什麼?

+0

如果運行陣列並運行相同的拒絕(?空)它應該做的伎倆 –

+0

你已經知道如何'拒絕',所以'!拒絕!'你不想從頂層數組中獲得的元素。 – meagar

+0

'eqs.reject(&:empty?)。each ...' –

回答

4

可以使用陣列#delete_if

arr = [{}, {}] 
arr.delete_if &:empty? 
# i.e. arr.delete_if { |hash| hash.empty? } 
arr.empty? 
# => true