16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"RE:RE^2:文字変数の比較を簡単に"
この発言は #00936 kiima さんのRE^2:文字変数の比較を簡単に に対するコメントです
この発言に対し以下のコメントが寄せられています
#00938 T. Kawanishi さん RE^4:文字変数の比較を簡単に
kiimaさん、こんにちは。
なるほど、表参照の方が速いですね。でも、一回だけ呼び出すときには
かえって遅いので、値の初期化をコンパイル時に済ませてしまうと若干速
くなるはずですね。
function func5(ch : char):boolean;
const
AncTable : array[#0..#255] of boolean =
(false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,
true ,true ,true ,true ,true ,true ,true ,true ,
true ,true ,false,false,false,false,false,false,
false,true ,true ,true ,true ,true ,true ,true ,
true ,true ,true ,true ,true ,true ,true ,true ,
true ,true ,true ,true ,true ,true ,true ,true ,
true ,true ,true ,false,false,false,false,false,
false,true ,true ,true ,true ,true ,true ,true ,
true ,true ,true ,true ,true ,true ,true ,true ,
true ,true ,true ,true ,true ,true ,true ,true ,
true ,true ,true ,false,false,false,false,false,
false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false,
false,false,false,false,false,false,false,false);
begin
result := AncTable[ch];
end;
うみゅ、若干速くするだけのためにここまでするかなぁ(^^;)。せめて、
true,false を 1,0 と短く書きたい。型キャストを使う手もあるけれど、
脱線ついでに禁断の absolute を使って、
function func6(ch : char):boolean;
const
AncTableByte : array[0..255] of byte =
(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,
0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
var
AncTableBool : array[#0..#255] of boolean absolute AncTableByte;
begin
result := AncTableBool[ch];
end;
簡潔さとスピードは両立しないんでしょうかね(^^;)。
ひの
Original document by ひの 氏 ID:(GFD03044)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|