Ruby(Rails):去除每个数组项中的空格

34

我找到了这段代码

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

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

4个回答

80

这就是collect的用途。

以下处理nil元素,通过让它们保持不变:

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

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

yourArray.collect(&:strip)

...which is short for:

这句话的意思是:「简称为:」
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)中确认这一点。 - pronebird
1
你能解释一下为什么要加上 || x 吗? - maahd

10

2
请注意,您不想在 Array 本身上调用 compact。对于您的答案,请提供类似于 a.compact.collect(&:strip) 的内容,或者使用像 Jamie 的答案中的 yourArray。我知道您正在进行伪代码编写,但在技术上精确方面对提问者有帮助。 - Ray Toal

4
如果您正在使用Rails,请考虑使用squish

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

yourArray.collect(&:squish)

1
为了简化一下,可以这样写:myArray.collect(&:squish) - Toby Joiner

3

根据您找到的方法,从操作哈希表转变为操作数组:

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

我正在执行row.each {|a| a.strip! if a.respond_to? :strip! }(并尝试了row2 = row.each {|a| a.strip! if a.respond_to? :strip! }以确保不是这个问题),但项目仍然有空格。不确定是否有帮助,但我正在处理一个使用FasterCSV导入的csv文件。我可能可以清理CSV输出,但无论如何,了解这一点对将来都会有用。 - Toby Joiner
@Toby(针对更新的评论)检查数组元素的类型(例如,puts x [0] .class)。如果不是字符串,则无法在它们上使用字符串的 strip! 方法。 - Nikita Rybak
结果证明我只是太蠢了,我不知道如果使用 :headers => true,它会将每个项目作为一个数组,其中标题是第一个元素,值是第二个元素,我让第二个项目工作了,然后发现只需在 sqlcmd 中添加 -W 就可以从 mssql 输出而无需空格。感谢大家的帮助。 - Toby Joiner

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