【问题标题】:Iterate through array and remove certain string elements遍历数组并删除某些字符串元素
【发布时间】:2012-01-13 16:03:30
【问题描述】:

我正在使用 nokogiri 解析一个 html 页面并提取一些数据点。它似乎提取了正确的数据点,但也提取了空值和逗号,这是提取的样本:

null,
3.28,
null,
null,
null,
1.91,
2.83,
null,
9.06,
null,
3.80,
6.42,
null,

我希望能够删除所有“null”实例以及逗号,然后将每个元素转换为浮点数。以上似乎根本没有删除“null”。

【问题讨论】:

  • 执行array.inspect 以检查非打印字符。或者把x == "null,"改成x =~ /null.*$/

标签: ruby arrays nokogiri


【解决方案1】:

不包括逗号(注意正则表达式中的括号):

data1 =  inline.to_s().scan(/y: (.*?)\,/)

结果:

result = data1.reject{|item| item == "null"}.map(&:to_f)

【讨论】:

    【解决方案2】:

    给你:

    input = <<INPUT
    null,
    3.28,
    null,
    null,
    null,
    1.91,
    2.83,
    null,
    9.06,
    null,
    3.80,
    6.42,
    null,
    INPUT
    
    result = input.split.map(&:to_f)
    => [0.0, 3.28, 0.0, 0.0, 0.0, 1.91, 2.83, 0.0, 9.06, 0.0, 3.8, 6.42, 0.0]
    result.delete(0.0)
    => 0.0
    result
    => [3.28, 1.91, 2.83, 9.06, 3.8, 6.42]
    

    【讨论】:

    • 这也会删除输入中可能存在的任何 0
    • 是的。但 OP 并没有声称,他需要零 :)
    • 他也没有声称他需要四人或五人。我认为代码应该处理它们。
    【解决方案3】:

    你可以这样做:

    array.reject{|x|x =~ /null/}.map(&:to_f)
    

    【讨论】:

    • 即使这样似乎也不起作用,而且我得到了 ["null"] 数组的未定义方法 to_f。这可能是什么?
    • 还是同样的问题,它不会抛出错误,但它也没有摆脱空部分。
    • 为了清楚起见,您需要对结果做一些事情。原数组不受影响。
    猜你喜欢
    • 2014-04-12
    • 2015-05-29
    • 2022-08-16
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    相关资源
    最近更新 更多