2010-10-13 58 views

回答

58

这是collect的用途。

yourArray.collect{|x| x.strip || x }

或者(会改变已经是 “剥夺” 字符串无“:

yourArray.collect(&:strip)

http://apidock.com/ruby/Array/collect

+0

我对Ruby真的很陌生,但'.strip'不应该返回'nil'。 '.strip!'尽管返回'nil',如果它没有去掉任何东西。我可以用交互式shell(irb)来确认。 – Andy 2016-01-07 12:27:42

+1

你能解释你为什么做了||吗? x'? – maahd 2017-08-14 12:21:23

2

几乎是一样的,只是你改变each_key向阵列(each)和self[a]的每一个元素进行处理,以a(因为你不需要考虑散了的方法)。

.each {|a| a.strip! if a.respond_to? :strip! } 

编辑
一个例子

x = [" 1 ", "b", " c ", 5] 
x.each {|a| a.strip! if a.respond_to? :strip! } 
puts x.inspect 

输出:

["1", "b", "c", 5] 

的字符串,不空格结束了。

+0

我在做row.each {| a | a.strip!如果a.respond_to? :跳闸! }(并尝试了row2 = row.each {| a | a.strip!如果a.respond_to?:strip!}以确保它不是那样,但是这些项目仍然有空白区域。但是我正在用一个csv文件来处理这个问题,我使用FasterCSV,我可以清理CSV输出,但是对于未来的这种情况将会很有帮助 – 2010-10-13 17:41:01

+0

@Toby你的意思是,它不工作吗?已经发布了一个例子 – 2010-10-13 17:43:48

+0

@Toby(更新评论)检查哪些类型的数组元素具有(例如'puts x [0] .class')。如果它不是字符串,则不能使用字符串的'strip!'方法 – 2010-10-13 17:49:28

6
YourArray.compact.collect(&:strip) 

如果你有一个零一些元素

+2

仅供参考,您不想在Array上调用'compact'。为你的答案提供类似'a.compact.collect(&:strip)'的东西,或者像Jamie的回答那样使用'yourArray'。我知道你会选择伪代码,但对于提问者来说,技术上是精确的。 – 2011-07-24 08:41:59

+1

@ Ray-Toal,你是对的! – Gvlamadrid 2011-08-04 04:12:53

2

我知道这是迟到,但发现这个squish一个简单的命令。

myArray.map! {|a| a.squish}将从每个数组元素中去掉所有以下和尾随的空格。

+1

只是为了缩短一点。 'myArray.collect(&:挤气)' – 2016-09-29 19:34:37