我必须对(行)数组的(行)数组进行排序。(行)数组包含任意数量的字符串。如果(行)数组仅包含空字符串,我想将其从(行)数组中删除。
我目前正在这样做:
rows.each do |row|
row.each_index do |i|
if row[i].length > 0
break
elsif i == row.count-1
rows.delete(row)
end
end
end
但是有没有更优雅的方法呢?
我必须对(行)数组的(行)数组进行排序。(行)数组包含任意数量的字符串。如果(行)数组仅包含空字符串,我想将其从(行)数组中删除。
我目前正在这样做:
rows.each do |row|
row.each_index do |i|
if row[i].length > 0
break
elsif i == row.count-1
rows.delete(row)
end
end
end
但是有没有更优雅的方法呢?
稍微简洁一点:
rows.reject! { |row| row.all?(&:empty?) }
在迭代时修改数组虽然不是一个好主意 - 您可能会发现您的代码会跳过某些元素或做一些奇怪的事情。我会做
rows.reject! {|row| row.all? {|row_element| row_element.empty?}}
如果该块row_element.empty?
对行中的所有元素评估为真,我们将拒绝该行。熟悉 Enumerable 中的所有方法非常值得,它们对于此类任务非常方便。
使用导轨时:
! rows.any?(&:present?)
您可以使用compact.uniq
或compact
。如果你的数组有nil
值,compact 会产生一个空数组,所以你可以像这样检查:
row.compact.size == 0
如果行包含空字符串“”,您可以像这样检查它:
row.compact.uniq.first.blank? and row.size == 1
rows.select{|row| row.compact.count >0}
这里:rows.all?(&:blank?)
。