POCH-7003 BEATout!

2011-11-29

テキストを指定桁数抜き出す?切り取る?やーーーつ

| 15:15

ブログrssなんかでよくあるテキストの先頭から50文字だけ切り取るみたいなやつ、結構使えるのでStringクラスにぶっコム。scanで細切れにするってのも考えたけど、文字数が多くなると遅くなりそうなのでヤメ。長文用にstrscanも考えたが結局正規表現でポジションを進めるのでムダが多いから長文でエラー承知で単純にした。

※あまりにもposの位置がデカイと多分エラーになる。30000とか・・・。つか、そんなテキスト処理しないからこれで良いのさ。

UTF-8で改行も含める仕様。

class String
  def cut(length, pos=0)
    self[/^.{0,#{pos}}(.{0,#{length}})/mu, 1]
  end
end

実行してみる

puts "あいうえおかきくけこさしすせそ".cut(10)
#=> "あいうえおかきくけこ"

puts "あいうえおかきくけこさしすせそ".cut(5, 10)
#=> "さしすせそ"

2010-12-27

Enumrable#count に気づかず・・・

| 19:08

1.8.7からこんなメソッドが増えたのね・・・気づかなかったorz

1.8.6から1.8.7にアップデートしたらおかしな事になったので調べて見たらそういうことだった。

単純にmethod_missingなんって使ってはいけないね。バグの元ですわ

あーあほらし。

2010-01-29

複合キーで昇順降順ソートできるsort_byて良い

| 16:14

1.7系から?かな使えるようになったのは。

[[5,2],[1,2],[9,8],[5,9],[3,5],[3,4],[5,3]]

こんな配列があって、0番目を降順、1番目を昇順でソートしたいって時が多々ある。SQLだと簡単なんだが・・・。と言いつつもrubyでも簡単にできるこの素晴らしさ。

irb(main):001:0> arr = [[5,2],[1,2],[9,8],[5,9],[3,5],[3,4],[5,3]]
irb(main):002:0> arr.sort_by{|a| [-a[0], a[1]]}
=> [[9, 8], [5, 2], [5, 3], [5, 9], [3, 4], [3, 5], [1, 2]]

仮にa[1]の値がTimeであれば、単純に.to_iしてやればそれで済む。これなら、ORDER BY a desc, bの感覚で使えるな。