Ruby:在哈希数组中删除空括号

9

我正在爬取的内容包含一些空白元素。我需要停止变量的设置,如果没有数据的话(最好),或者只需稍后进行一些操作,并完全删除包含空白的哈希。

这是我的抓取代码:

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"
 }
]

我希望完全摆脱空的哈希表!有人知道我在这里做错了什么吗?


如果你运行该数组并运行相同的 reject(&:empty?),它应该能解决问题。 - Stephen C
你已经知道如何使用 reject!,所以从顶层数组中 reject! 掉你不想要的元素。 - user229044
eqs.reject(&:empty?).each... - Andrey Deineko
1个回答

12

你可以使用Array#delete_if

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

更新

在Rails 6.1+中也有Array#compact_blank!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接