質問

私は配列で遊んとルビーでかなり多くのことをハッシュし、このようになりますいくつかのコードで終わる:

sum = two_dimensional_array.select{|i|
  i.collect{|j|
    j.to_i
  }.sum > 5
}.collect{|i|
  i.collect{|j|
    j ** 2
  }.average
}.sum

(...のすべてが、上記のコードサンプルは、今理にかなっていることをふりをしてみましょう)。

問題はTextMateは(選択の私のエディタ)は非常に簡単な{...}またはdo...endブロックをピックアップしていてもしても、私はフォールドする「正しい」方法を見つけることができないので、それは理解している(把握することはできませんということです上記)上記ブロックが起動し、それらを折るために終わるところます。

あなたは上記のコードサンプルを折るだろうか?

PS:それは折りたたみの2行のレベルを持つことができることを考えると、私は

外の連続したもの(Iでブロック)を気に
役に立ちましたか?

解決

正直に言うと、回旋何かがおそらくそれを維持するために持っている他の誰と同じくらいのTextMateを混乱さ、そしてそれは将来的にあなたが含まれてます。

あなたが1つの値にロールアップし、何かを見るたびに、

、それは可算#の注入を使用するための優れたケースです。

sum = two_dimensional_array.inject(0) do |sum, row|
  # Convert row to Fixnum equivalent
  row_i = row.collect { |i| i.to_i }

  if (row_i.sum > 5)
    sum += row_i.collect { |i| i ** 2 }.average
  end

  sum # Carry through to next inject call
end

どのようなあなたの例では奇妙なのは、あなたがto_iを使用して変換容疑者は、完全な配列を返すことを選択使用しているが、実際には可算#はそのようなことをしない選択して、代わりにそのための関数がnilを返す任意の拒否します。私はそれが自分の価値観の全くません想定しています。

また、あなたの.average方法がどのように実装されるかに応じて、あなたは浮動小数点値を使用するために0.0ではなく0に注入コールをシードしたい場合があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top