我是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 次 |
| 最近记录: |