【问题标题】:Ruby (Rails): remove whitespace from each array itemRuby(Rails):从每个数组项中删除空格
【发布时间】:2010-10-13 17:12:38
【问题描述】:

I found this code:

.each_key {|a| self[a].strip! if self[a].respond_to? :strip! }

...但它是用于哈希的,而我正在尝试对数组做同样的事情。

【问题讨论】:

    标签: ruby-on-rails ruby arrays


    【解决方案1】:

    这就是collect 的用途。

    以下处理nil 元素,不理会它们:

    yourArray.collect{ |e| e ? e.strip : e }
    

    如果没有nil元素,你可以使用:

    yourArray.collect(&:strip)
    

    ...简称:

    yourArray.collect { |e| e.strip }
    

    strip! 的行为类似,但它将已经“剥离”的字符串转换为nil

    [' a', ' b ', 'c ', 'd'].collect(&:strip!)
    => ["a", "b", "c", nil]
    

    https://ruby-doc.org/core/Array.html#method-i-collect

    https://ruby-doc.org/core/String.html#method-i-strip

    【讨论】:

    • 我真的是 Ruby 新手,但.strip 不应该永远返回nil.strip! 虽然返回 nil 如果它没有剥离任何东西。我可以通过交互式 shell (irb) 确认这一点。
    • 你能解释一下你为什么要做|| x吗?
    【解决方案2】:

    如果您不介意先删除nil 元素

    YourArray.compact.collect(&:strip) 
    

    https://ruby-doc.org/core/Array.html#method-i-compact

    【讨论】:

    • 仅供参考,您不想在Array 上调用compact。对于您的答案,请提供 a.compact.collect(&:strip) 之类的内容或使用 yourArray,如 Jamie 的答案中所示。我知道你会使用伪代码,但它有助于提问者在技术上准确。
    【解决方案3】:

    如果您使用的是 Rails,请考虑squish

    返回字符串,先删除字符串两端的所有空白,然后将剩余的连续空白组各换成一个空格。

    yourArray.collect(&:squish)
    

    【讨论】:

    • 只是为了缩短一点。 myArray.collect(&:squish)
    【解决方案4】:

    调整你找到的方法,从处理哈希到处理数组:

    [' c ', 'd', nil, 6, false].each { |a| a.strip! if a.respond_to? :strip! }
    => ["c", "d", nil, 6, false]
    

    【讨论】:

    • 我在做 row.each {|a| a.strip!如果 a.respond_to? :条! } (并尝试了 row2 = row.each {|a| a.strip! if a.respond_to? :strip! } 以确保不是那样,但这些项目仍然有空格。不确定它是否有帮助,但我正在使用 FasterCSV 提取的 csv 文件执行此操作。我可能会清理 CSV 输出,但无论如何了解这一点对未来很有用。
    • @Toby(更新评论)检查数组元素的类型(例如,puts x[0].class)。如果不是字符串,则不能对它们使用字符串的strip! 方法。
    • 原来我只是笨,我不知道如果你使用 :headers => true ,它会使每个项目成为一个数组,标题作为第一个元素,值作为其次,我让它在第二个项目上工作,然后发现将 -W 添加到 sqlcmd 以在没有空格的情况下从 mssql 输出同样容易。感谢大家的帮助。
    猜你喜欢
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    相关资源
    最近更新 更多