使用Ruby 2.4。我有一个带有数字字符串元素的arry。我想从数组的末端剥离无数或空的elemet,所以我有
row_data.pop until row_data.last || row_data.empty?
但这只是剥离了数组末尾的nil元素。如何调整上面的内容以便它还包含空元素?
答案 0 :(得分:2)
row_data = [ "", "hi", "", nil ] # => ["", "hi", "", nil]
row_data.pop while !row_data.empty? && (!row_data.last || row_data.last.empty?) # => nil
row_data # => ["", "hi"]
与您的解决方案非常相似,但我们从while转换到除非导致而不是查找我们正在寻找nil
的对象的PRESENCE。然后我们检查该字符串是否为空。如果您希望数组中存在其他对象类型,则可以检查最后一个元素是否具有方法empty?
。 (但我假设您正在解析CSV,因此它很可能是一个没有实际意义的点)
如果你有active_support或者在rails中,这会变得更容易。
# 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
这将删除任何nil值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"]
答案 1 :(得分:1)
如果数组只包含字符串和df[rowSums(is.na(df))==3,]$A <- "NotImportant"
df[with(df, is.na(A) & (!is.na(B) | !is.na(C))),]$A <- "Unknown"
# A B C
#1 NotImportant NA NA
#2 Unknown 200 NA
,则可以写:
nil
注意row_data = ["cat", nil, '', nil]
row_data.tap { |rd| pop while rd.last.to_s.empty? }
#=> ["cat"]
。
如果nil.to_s #=> ''
也可能包含其他对象,可以写一下:
array