From: Hidetoshi NAGAI Date: 2008-01-29T01:41:45+09:00 Subject: [ruby-dev:33480] Re: Ruby1.9 String バイト列へのインデックス アクセス 永井@知能.九工大です. From: "NARUSE, Yui" Subject: [ruby-dev:33472] Re: Ruby1.9 String バイト列へのインデックス アクセス Date: Mon, 28 Jan 2008 21:12:36 +0900 Message-ID: <479DC6BB.6090306@airemix.com> > > |String::ByteIndexerとか。 > > > > うーん、どうしようかなあ。専用クラス化した方が性能が上がると > > かいいこともあるんですがねえ。でも、byteアクセスとbyte列挙子 > > を同一視することになんとなく抵抗感があります。 > > とも関連するのですが、ここにおける「Indexer」は「Enumerator」の特殊な場 > 合、つまり、ランダムアクセス可能かつ key が 0 から始まる整数である > 「Enumerator」になっています。つまり、まさに Array と同じ API を持ってい > るわけです。 binary データの操作という観点で考えてみると, 固定長レコードのデータ操作のようなケースで 「データの X バイト目の位置を先頭に格納されている文字列の操作」 などというのは普通にありそうです. 例えば「X バイト目から Y 文字分を1文字単位で繰り返し」とかです. もちろん,バイト列のコピーを切り出してから処理するという方法は あるわけですが,サイズ等の関係もあって切り出すことで 処理効率が非常に低下するなどとということもあるでしょうし, 「文字数 Z の文字列が格納されている」のような場合は サイズを指定してコピーを切り出すのはかなり面倒に思えます. というわけで,バイト単位で先頭位置を指定し, encoding を指定した文字単位での増分を容易に扱えるような API も望まれるのではないでしょうか. 例えば, indexer[idx, len] # idx から len バイト indexer[idx, len, enc] # idx から encoding が enc の文字として len 文字 とか. 他の場合も考えると,気持ち悪いメソッド群ができてしまいそうなのが 心配ですが.(^_^) -- 永井 秀利 (九工大 知能情報) nagai@ai.kyutech.ac.jp