- PR -

C#による半角⇔全角変換の方法は?

投稿者投稿内容
PoohKid
常連さん
会議室デビュー日: 2004/12/07
投稿数: 26
お住まい・勤務地: はてな市民
投稿日時: 2005-12-27 17:50
引用:

じゃんぬねっとさんの書き込み (2005-12-27 01:07) より:
速さでいうならば、switch 〜 case の通しなんてどうでしょうね? (^^



たしかに・・・(汗)

switch文だとEqualの繰り返し?
連想配列の場合はハッシュ値の取得?(Containsもあるので2度)

連想配列がマイブームなのでよく使っていますが、実際は内部でどういう仕組みになっているのか解っていないのです。
効率悪い・・・のかな?

余談ですが、すごい昔(20年ぐらい前)にFEPのコードを見たらswitch文のお化けだったのを思い出しました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-27 18:07
引用:

PoohKidさんの書き込み (2005-12-27 17:50) より:

switch文だとEqualの繰り返し?


StringBuilder に対して Append していくだけかなぁ。
もちろん、濁点の対応はしないといけませんが... (^^;)

馬鹿げている実装に見えますが、文字コード変換表を作る作業よりはマシだと思います。
アンマネージドでいいなら、API じゃなくて StrConv を素直に使うべきだと思いますね。
やっていることは同じでしょうから。

# Hashtable も、そういう意味で考えた場合はアリだと思いますよ。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2005-12-27 18:13
たくさん使うのなら、Hashtableが良いんじゃないでしょうか。
switchだと、先頭のcaseと最後のcaseで速度が変わってきて、
最後のほうだと高速とも言えなくなるんじゃないかと。
PoohKid
常連さん
会議室デビュー日: 2004/12/07
投稿数: 26
お住まい・勤務地: はてな市民
投稿日時: 2005-12-27 19:10
引用:

StringBuilder に対して Append していくだけかなぁ。
もちろん、濁点の対応はしないといけませんが... (^^



StringBuilderよりもchar配列かなぁと思っていましたが、、、「濁点」ですか!!!

すっかり忘れていました。Unicodeでの1:1置換ではないのですね。
私のコードでは未対応です。(英数専用)

Unicode1文字と2文字が相互に変換されるなら、配列要素の入れ替えではなくStringBuilderになりますね。
需要が出たら対応します。それまで放置(だめじゃん)。^^;
ロリコン
会議室デビュー日: 2005/12/03
投稿数: 2
投稿日時: 2005-12-27 21:10
たくさんの文字列を switch 文で比較すると、
Dictionary を使った実装に勝手に最適化されるみたいですね。
おもしろいです。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-31 19:08
実験したのに、反応するのを忘れてました。

引用:

mioさんの書き込み (2005-12-27 18:13) より:

たくさん使うのなら、Hashtableが良いんじゃないでしょうか。
switchだと、先頭のcaseと最後のcaseで速度が変わってきて、
最後のほうだと高速とも言えなくなるんじゃないかと。


詳細な数値は EULA の関係でお出しできませんので、抽象的に結果を報告します。
結果ですが予想通り、switch case の方が数倍高速でした。
(IL 解析をすると面白いです)

VB の Select Case ですら、総合的に見て高速でした。
(非合致の場合 (Else Case) は若干 Hashtable の方が高速でした)

[ シグネチャを削除 ]

[ メッセージ編集済み 編集者: じゃんぬねっと 編集日時 2006-10-12 11:48 ]

スキルアップ/キャリアアップ(JOB@IT)