4

(行) 配列の (行) 配列を並べ替える必要があります。(行) 配列には、任意の数の文字列が含まれます。(行) 配列に空の文字列のみが含まれている場合は、(行) 配列から削除します。

私は現在これをやっています:

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

しかし、それを行うためのよりエレガントな方法はありますか?

4

6 に答える 6

5

もう少し簡潔に:

rows.reject! { |row| row.all?(&:empty?) }
于 2012-10-08T20:22:38.470 に答える
4

反復中に配列を変更するのは良い考えではありませんが、コードが特定の要素をスキップしたり、奇妙なことをしたりすることがあります。私はするだろう

rows.reject! {|row| row.all? {|row_element| row_element.empty?}}

row_element.empty?行内のすべての要素についてブロックが true と評価された場合、その行は拒否されます。Enumerable のすべてのメソッドに慣れる価値は十分にあります。これらのメソッドは、この種のタスクに非常に便利です。

于 2012-10-08T18:56:46.700 に答える
2

compact.uniqまたはを使用できますcompact。配列にnil値がある場合、コンパクトは空の配列になるため、次のように確認できます。

row.compact.size == 0

行に空の文字列 "" が含まれている場合は、次のように確認できます。

row.compact.uniq.first.blank? and row.size == 1
于 2012-10-08T19:09:08.397 に答える
0
    rows.select{|row| row.compact.count >0}
于 2012-10-08T20:03:09.073 に答える