文字列の比較について

解決


かえで  2004-02-07 06:46:50  No: 6984

日本語Windows上で2つの文字列型変数(S1、S2)の内容が
「全く同一かどうか」を判断したいとき、
(1) if S1 = S2 then
(2) if AnsiSameStr(S1, S2) then
のどちらを使う方がよいのでしょうか?
よろしくお願いします。


たかみちえ  URL  2004-02-07 07:48:29  No: 6985

んじゃあってんで試してみました。
おんぷむらのうらのDebugUnitを用いた、デバッグメモ帳への出力です。

var
  i : Integer;
  S1, S2: String;
  b : Boolean;
begin
  S1 := 'たかみちえ';
  S2 := 'http://Onpu.jpn.ch/';
  DebugBeginTimer('S1 eq S2');
  for i := 0 to 1000000 do
    b := S1 = S2;
  DebugEndTimer('S1 eq S2');
  DebugBeginTimer('AnsiSameStr(S1, S2)');
  for i := 0 to 1000000 do
    b := AnsiSameStr(S1, S2);
  DebugEndTimer('AnsiSameStr(S1, S2)');
end;
  デバッグメモ帳への出力結果は以下のとおりでした。
OSバージョン WinNT 5.1.2600 Service Pack 1
----------------------------------------------------------------------S1 eq S2 = 33ms
AnsiSameStr(S1, S2) = 872ms
  ロケール制御が入ってるからかどうか知りませんが、
素直に演算子を使えるとこは演算子を使いましょう。
ちゃんちゃん。


たかみちえ  URL  2004-02-07 07:59:43  No: 6986

ああ、改行がずれてしまいました^^;

S1 eq S2 としてるのは、S1 = S2 がデバッグタイマ名に使えないから(内部でTStringListを使ってるから)です。
  ちなみに、処理の順番を逆に(2->1)にしてみましたけど、
AnsiSameStr(S1, S2) = 961ms
S1 eq S2 = 42ms
と、比率はあんまり変わりありませんでした。
メモ帳への転送時間などで多少の時間のずれはあると思いますが、こんなとこでいいでしょう。


かえで  2004-02-07 09:43:56  No: 6987

たかみちえさん、ご回答ありがとうございました。
処理に掛かる時間がずいぶん違うのですね。
びっくりしました。

> 素直に演算子を使えるとこは演算子を使いましょう。
はい、そうします!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加