【问题标题】:Ruby: remove empty braces in array of hashesRuby:删除散列数组中的空括号
【发布时间】:2017-05-01 18:29:14
【问题描述】:

我正在抓取的内容包含一些空白元素。如果没有数据(最好),我要么需要停止设置变量,要么之后只做一些手术并完全删除包含空格的哈希。

这是我的抓取代码:

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?) 它应该可以解决问题
  • 你已经知道如何reject!,所以reject!顶级数组中你不想要的元素。
  • eqs.reject(&:empty?).each...

标签: arrays ruby hash nokogiri


【解决方案1】:

你可以使用数组#delete_if

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

【讨论】:

    猜你喜欢
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    • 2018-01-13
    • 2014-01-28
    • 2019-02-24
    相关资源
    最近更新 更多