よたらぼ
自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
Ruby言語やLinuxのネタが多いです。

September 26, 2003 [おもひで]

[Ruby] ObjectPool

Ian A. Marsmanという人が、使ったよー、というメールをくれた。

DBのコネクションプール用に使っている模様。2001/12/30にリリースして、2年掛けでユーザ登場(^^;)。

で、ちとコードを読み直してみたんだけど、これ、クラスじゃなくてモジュールの方が良いかなぁ。2年ぶりに手を入れるべきか...。

[Ruby] 2つの文字列の先頭から等しい文字列を抜き出す

例えば、abcとabcdefという2つの文字列があったら、abcを返す。マッチしなかったら空文字を返す。

  def match_first(a, b)
    ret = ""
    (0...a.size).each do |i|
      break unless a[i] == b[i]
      ret << a[i]
    end
    ret
  end
   
  puts match_first("abc", "abcdef")        #=> "abc"
  puts match_first("abc", "abc")           #=> "abc"
  puts match_first("abc", "fabcd")         #=> ""
  puts match_first("あいう", "あいうえ")   #=> "あいう"

なんか、もちっとエレガントな書き方ないかな。ひょっとして正規表現一発で書けちゃったりする?

本日のツッコミ(全2件) [ツッコミを入れる]
kzys (September 27, 2003 11:39)

正規表現二発でやってみました。<br><br>def match_first(a, b)<br> if a =~ /^(#{Regexp.escape(b)})/ or b =~ /^(#{Regexp.escape(a)})/<br> $1<br> else<br> return ''<br> end<br>end

さかい (September 27, 2003 13:25)

def match_first(a,b)<br> a = a.split(//)<br> b = b.split(//)<br> l = [a.length, b.length].min<br> a[0, (0...l).find{|i| a[i] != b[i] } || l].join('')<br>end


編集