我必须排序(行)数组(行)数组。 (行)数组包含任意数量的字符串。如果(行)数组只包含空字符串,我想从(行)数组中删除它。
我目前正在这样做:
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
但有更优雅的方式吗?
答案 0 :(得分:5)
稍微简洁一点:
rows.reject! { |row| row.all?(&:empty?) }
答案 1 :(得分:4)
在迭代时修改数组并不是一个好主意 - 你可能会发现你的代码会跳过某些元素或做出奇怪的东西。我做了
rows.reject! {|row| row.all? {|row_element| row_element.empty?}}
如果块row_element.empty?
对行中的所有元素的计算结果为true,则拒绝一行。熟悉Enumerable中的所有方法非常值得,它们对于这类任务非常方便。
答案 2 :(得分:4)
使用rails时:
! rows.any?(&:present?)
答案 3 :(得分:2)
您可以使用compact.uniq
或compact
。如果您的数组具有nil
个值,则compact将导致一个空数组,因此您可以像这样检查:
row.compact.size == 0
如果row包含空字符串“”,您可以像这样检查它:
row.compact.uniq.first.blank? and row.size == 1
答案 4 :(得分:0)
rows.select{|row| row.compact.count >0}
答案 5 :(得分:-1)
此处:rows.all?(&:blank?)
。