我是Ruby的新手并坚持这个问题.假设我有一个这样的数组:
arr = [1, 2, 's', nil, '', 'd']
Run Code Online (Sandbox Code Playgroud)
我想从中删除nil和空字符串,即最终数组应该是:
arr = [1, 2, 's', 'd']
Run Code Online (Sandbox Code Playgroud)
我尝试了compact
但它给出了这个:
arr.compact!
arr #=> [1, 2, 's', '', 'd'] doesn't remove empty string.
Run Code Online (Sandbox Code Playgroud)
我想知道在Ruby中是否有一种聪明的方法.
Car*_*and 38
你可以这样做:
arr.reject { |e| e.to_s.empty? } #=> [1, 2, "s", "d"]
Run Code Online (Sandbox Code Playgroud)
注意nil.to_s => ''
.
如果arr
可能包含您希望保留的另一种空对象(例如,数组或散列),请更改e.to_s.empty?
为e.to_s == ''
awe*_*ndt 24
既然要删除nil
空字符串和空字符串,那么它与如何从数组中删除空白元素并不重复?
你想用.reject
:
arr = [1, 2, 's', nil, '', 'd']
arr.reject { |item| item.nil? || item == '' }
Run Code Online (Sandbox Code Playgroud)
注意: reject
使用和不使用bang的行为与使用和不使用bang的行为相同compact
:reject!
并compact!
修改数组本身,reject
然后compact
返回数组的副本并保持原始状态不变.
如果您正在使用Rails,您也可以使用blank?
.它专门设计用于处理nil
,因此方法调用变为:
arr.reject { |item| item.blank? }
Run Code Online (Sandbox Code Playgroud)
Mar*_*n13 13
如果您正在使用Rails
(或独立的ActiveSupport
),从 version 开始6.1
,有一个compact_blank
方法可以blank
从数组中删除值。
它Object#blank?
在幕后用于确定项目是否为空白。
[1, 2, 's', nil, '', 'd'].compact_blank
# => [1, 2, 's', 'd']
[1, "", nil, 2, " ", [], {}, false, true].compact_blank
# => [1, 2, true]
Run Code Online (Sandbox Code Playgroud)
还提供破坏性变体。看Array#compact_blank!
。
我倾向于这样做:
arr = [1, 2, 's', nil, '', 'd']
arr.reject(&:blank?)
Run Code Online (Sandbox Code Playgroud)
收益:
=> [1, 2, "s", "d"]
Run Code Online (Sandbox Code Playgroud)
arr.reject(&:blank?)
就用这个,不需要别的。
归档时间: |
|
查看次数: |
31809 次 |
最近记录: |