|
setup diary |
a.reject{|l| l~/^#/} a.grep(/^[^#]/)の上のような使い方を良くしていたのだが、これは下のように書けることが分かった。ちなみに後者では、空の文字列も除ける。また、sortの時に、いちいち二つのものの比較を書くのが面倒だと思っていたが、
a.sort{|x,y| x.abs<=>y.abs} a.sort_by{|x| x.abs}上と同じことを下のように書けるようだ。実際にはこれらは内部処理も異なっているようだが。それから、maxやminはあるけど、sumが無いと思っていたが、これは足すという作業は一般的ではないからだろう。しかし、
a.inject{|s,i| s+i}とすると、合計を求めることができる。 あと、多項式の値の計算をどうやったらきれいに書けるかで悩んでいる。新しくメソッドを定義すればよいのだが、一行で書けるのならその必要もないし。とりあえず考えたのが、
x=1.2 s=0.0 [0.0,1.0,0.0,-1.0/6].each_with_index{|c,i| s+=c*x**i} p sというものだ。これだと、新しく変数を定義する必要がある。次に考えたのが、
x=1.2 p [0.0,1.0,0.0,-1.0/6].reverse.inject{|s,c| s*x+c}というものだ。これはとりあえずの目的は達しているように思われるが、直感的ではない。今のところこのくらいは仕方が無いのかな。collect_with_indexとかがあればもう少しシンプルに書ける気がする。