我如何从数组末端剥离零或空元素



使用Ruby 2.4。我有一个带有字符串元素的数量的Arry。我想剥离从阵列的末端脱下零或空的elemetns,所以我有

row_data.pop until row_data.last || row_data.empty?

但这只是在数组末端剥离零元素。我如何调整上面的调整,以便它还包括空的元素?

row_data = [ "", "hi", "", nil ]                                                 # => ["", "hi", "", nil]
row_data.pop while !row_data.empty? && (!row_data.last || row_data.last.empty?)  # => nil
row_data                                                                         # => ["", "hi"]

与您的解决方案非常相似,但是我们会从时光倾斜到否则,除非原因而不是寻找对象的存在,否则我们正在显式寻找nil。然后,我们检查该字符串是否为空。如果您希望在数组中存在其他对象类型,则可以检查最后一个元素是否具有方法empty?。(但是我认为您正在解析CSV,所以很可能是一个毫无意义的点(

如果您有Active_support或在轨道内部,则会变得更容易。

# Ignore the require if in a rails project
require 'active_support/core_ext/object/blank'  # => true
row_data = [ "", "hi", "", nil ]                             # => ["", "hi", "", nil]
row_data.pop while !row_data.empty? && row_data.last.blank?  # => nil
row_data                                                     # => ["", "hi"]

下面将从数组的任何位置删除NIL或空字符串

 row_data = [ "hi", "", nil ]
 row_data.compact.reject(&:empty?) # => ["hi"]

给定一系列字符串,假设没有active_support,这将删除任何零值compact,然后拒绝任何为空reject(&:empty?)的字符串,这确实会创建一个新的数组,并且不会进行任何更改。如果您需要突变原始对象,请使用以下代码

 row_data = [ "hi", "", nil ]
 row_data.compact!.reject!(&:empty?) # => ["hi"]
 row_data # => ["hi"]

如果您有积极的支持,则可以降低

 row_data = [ "hi", "", nil ]
 row_data.reject(&:blank?) # => ["hi"]

如果数组仅包含字符串和 nil s,则可以写入:

row_data = ["cat", nil, '', nil]
row_data.tap { |rd| pop while rd.last.to_s.empty? }
  #=> ["cat"] 

注意nil.to_s #=> ''

如果array也可能包含其他对象,则可以写入:

row_data = ['', 1, :cat, {}, [], nil]
row_data.tap { |rd| rd.pop while (rd.last.nil? || 
  (row_data.last.respond_to?(:empty?) && row_data.last.empty?)) }
   #=> ["", 1, :cat]

相关内容

  • 没有找到相关文章

最新更新