Ruby言語やLinuxのネタが多いです。
September 29, 2003 [おもひで]
■ [Ruby] (続 x 2) 2つの文字列の先頭から等しい文字列を抜き出す
ささださん版。いやー、特に2つ目のがすばらしいですね。新しいオブジェクトを極力作らないようになっていますし、むとう版のように文字列をいちいち追加したりもしていないので高速ですし。ってかInteger#times思いつきませんでした....(-o-;)。and aに関してはたぶん今後も思いつかないハズ(^^;)。
■ というわけで、実際、簡単な性能テストをしてみました。
s = Time.now
(0...1000).each {
match_first("abc", "abcdef")
match_first("abcdefghijklmn", "abcdefghijklmnop")
match_first("a" * 50 + "b" * 50, "a" * 50 + "c" * 50)
match_first("abc", "abc")
match_first("abcd", "abce")
match_first("abc", "fabcd")
match_first("あいう", "あいうえ")
}
p Time.now - s
■ テストが適切かどうかというのはあまり自信がありませんが、少なくとも上記のテストではささださん版がダントツに速いです。
というわけでイタダキなのです。
■ もちろん、ZnZさん版、さかいさん版は性能を考慮しているわけではないということをお断りしておきます。
■ [Ruby-GNOME2] ZoneCheck
ZoneCheck is intended to help solving misconfigurations or inconsistencies usually revealed by an increase in the latency of the application, up to the output of unexpected/inconsistant results.
だそうです。オプションですがRuby/GTK2を使ったGUI frontendがサポートされています。
■ [Ruby] andの使い方
;の代わりですか。なるほどー。
お恥ずかしながら意識的にこのようなandの使い方をしたことなかったので勉強になりました(汗。
andやorは評価された結果の値が返るんですね。そーか。考えたこと無かったなぁ、てか、trueかfalseが返るかと思いこんでました(^^;)。<相変わらずダメなオレ。
irb(main):010:0> "hoge" and "fuga" => "fuga" irb(main):011:0> 1 and "hoge" => "hoge" irb(main):012:0> nil and "hoge" => nil irb(main):013:0> false and "hoge" => false irb(main):010:0> "hoge" or "fuga" => "hoge" irb(main):031:0> 1 or "hoge" => 1 irb(main):032:0> nil or "hoge" => "hoge" irb(main):033:0> false or "hoge" => "hoge"
■ [Ruby](続 x 3) 2つの文字列の先頭から等しい文字列を抜き出す
; のほうが速いんじゃないとのことなので試す。おー、確かに微妙に速い。さらに;ではなく改行にして以下のようにするともちっとだけ速くなるみたい。
def match_first(a, b)
a.size.times{|i|
return(a[0,i]) if a[i] != b[i]
}
a
end
■ 数回繰り返すと1の方が速くなったり2の方が速くなったりもするけど総じて3が速い感じ。微妙だけど。
■ あ、忘れてた。環境はruby 1.8.0 (2003-09-02) [i686-linux]だす。

and は ';'(改行)の代わりなんですが、 ';' だとズルイ(無理やりまとめてる)気がするので、and にしてました。
or/and は使わない言うてたくせに〜(http://www.rubyist.net/~tamura/d/?date=20030916#c01 )>ささだ
なるほど。代入時に使うと確かにハマリそうですね。
たむらさんの日記で and の優先順位を覚えました!