SSブログ

Array#index と String#index [Ruby]

前回のコード [1] を投稿した後でまずかったと思ったのは

pos = input[start..-1].index(pat.first)

とか書いている部分で、これは元の Lisp コードでいう

(let ((pos (position (first pat) input
                             :start start :test #'equal)))...

というのがやりたかった。
つまり配列 input の中で start 番目の要素以降に最初に pat.first が現れる位置を返すというものなのだけど Array#index [2] には探し始める位置を指定する引数が無いのでこうしたのだ。でも書き方の意図がすぐには分からないし配列を複製するので効率が悪い。あと pos に start を足さないと本来の位置が得られない。自家版 index メソッドを作った方が良かったと思う。

しかし String クラスの index メソッド [3] はどうだっけと思ってリファレンスを見たら、こっちはちゃんと検索開始位置を指定できることが判明。うーん、納得いかないなあ。(これを使う場面で最初に見つかるものだけに興味があるというほうが稀だと思うので基本的に index には開始位置が必須のような気がする)

[1] http://blog.so-net.ne.jp/rainyday/2007-03-18-1
[2] http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Array#index
[3] http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=String#index


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。