如何仅将我的函数应用于非零元素?

时间:2016-08-01 20:35:39

标签: arrays ruby

我正在使用Rails 4.2.7。我有这个简洁的功能,修剪(剥离)我的数组中的字符串

data_cols = data_cols.collect{|x| x.strip || x }

但是,如果数组中的一个元素为零,则上述内容会崩溃。如何修改上述内容以使其不适用于nil元素?

3 个答案:

答案 0 :(得分:4)

如果您想完全从数组中删除nil值,可以使用compact

cols.compact.map { |col| col.strip } 
# or 
cols.compact.map(&:strip) 

如果你想保留所有值,但只对非零值进行操作,你可以简单地使用nil-guard:

# straightforward, no magic, works across rubies:
cols.map { |col| col && col.strip }

# a wee dose of magic in ruby 2.3 (safe navigation operator)
cols.map { |col| col&.strip }

最后,如果你想要更加惯用和红宝石般的风格,你可以使用鸭子打字,让对象自己整理,无论他们是否可以&#34;剥离&#34; ped&#34;:< / p>

cols.map { |col| col.respond_to?(:strip) ? col.strip : col }

答案 1 :(得分:0)

您可以使用try

data_cols = data_cols.collect{|x| x.try(:strip) }

http://apidock.com/rails/Object/try

答案 2 :(得分:0)

取决于您是否仍需要结果数组中的nil值。如果没有,您可以使用compact

data_cols = data_cols.compact.collect{|x| x.strip || x }

compact将删除数组中的所有nil值。

如果您想保留零值,则需要更改条件:

data_cols = data_cols.compact.collect{|x| x ? x.strip : nil }