答应过要发几篇心得的,第二篇:在 case 语句中使用字符串 (50分)

S

SS2000

Unregistered / Unconfirmed
GUEST, unregistred user!
我遇到这种情况,特老实,就用
if...then
......
else
if....then
.....
else
if....then
.....
else
if....then
....
else
....
就是写的罗嗦,不过很好懂,执行效率也是最高,出错的可能性也小.
当然,代码的创意就差多了.就看个人的习惯了,我认为不必为了用case而用case
 

孔明.net

Unregistered / Unconfirmed
GUEST, unregistred user!
B

beta

Unregistered / Unconfirmed
GUEST, unregistred user!
to 小雨哥:别叫的我那么老,没准我比你小:)
你这个方法不行哦,你把 StrToOrd 传给 StrSel,再往后是没有问题,可是
你的 StrToOrd 是从 Ord(Chongqing);
得来,这个 Ord 里面的 Chongqing
本来就是枚举型,而事实上它常常是字符串输入。
你手动把字符串转换为枚举了,当然 GetEnumValue 省了:)
欢迎继续讨论。
 
S

stuwei

Unregistered / Unconfirmed
GUEST, unregistred user!

小雨哥

Unregistered / Unconfirmed
GUEST, unregistred user!
TO:beta
智者为长。 :) 你说得对,我这个只能用在程式里,
不能做为 UI 例程。
 

酷尔贝塔

Unregistered / Unconfirmed
GUEST, unregistred user!
再次收藏[:D]
 
C

creation-zy

Unregistered / Unconfirmed
GUEST, unregistred user!
我曾经在一个网络游戏中使用String的HASH值进行case——预先计算出各个备选String的
HASH值,然后再case Hash(Str)就可以了。当然了,我平时还是倾向于TStringList.IndexOf。
 
R

real_clq

Unregistered / Unconfirmed
GUEST, unregistred user!
TO:beta
有意思。不过我和SS2000一样,几乎不用case,麻烦,在语言间转换时尤其。
 
C

creation-zy

Unregistered / Unconfirmed
GUEST, unregistred user!
to SS2000:
>>很好懂,执行效率也是最高
我认为经过排序处理的TStringList的索引速度可以达到Log2N的时间复杂度,而且我还专门
看了case生成的asm代码工作流程——只要一次性跳转即可到达要执行的代码处,效率显然比
if...then
的N/2的平均比较次数低。——当然,在N<4的时候,用if...then
是最清晰且高效的。
在我的网络游戏中,有100多个指令,为了提高速度,我采用了Hash函数,效果还不错。
 
B

beta

Unregistered / Unconfirmed
GUEST, unregistred user!
to creation-zy: 多谢指点,Hash 表我也想过,不过处理重复关键字的时候麻烦点
特别是在极端条件下:)
当然,由于 Delphi 对枚举类型的优化的原因,其个数有限制,如果像你说的有 100
多种情况,相信 Hash 表应该是首选。
但是在通常的应用里面,它还是显得不太适合:)
 
S

sky0061

Unregistered / Unconfirmed
GUEST, unregistred user!
UP并收藏
 
R

real_clq

Unregistered / Unconfirmed
GUEST, unregistred user!
to SS2000:
TStringList用了索引自然是不同的。如果真的要效率,TStringList实际上也并不合适。
 
R

real_clq

Unregistered / Unconfirmed
GUEST, unregistred user!
好象是to creation-zy才对。:)小弟乱说几句,大伙别介意。:)
 
S

SS2000

Unregistered / Unconfirmed
GUEST, unregistred user!
呵呵,你么说得都很对,我同意。
不过我只是表达了我的意思,还表达错了:(, creation-zy还说我的那种办法
效率不是最高。我也同意,呵呵,我从善如流。
不过,编程序往往并不是效率最重要,还有很多它的因素,使我采用效率并不
高的做法,而抛弃效率高的做法,我是不是有问题呀,呵呵
 
H

HHSH

Unregistered / Unconfirmed
GUEST, unregistred user!
我用这一种:
const
strArray : array [0..10] of string = ['str0', 'str1', 'str2', ...];
for i := 0 to 10do
if strArray = str then
case i of
0:do
str1 thing
1:do
str1 thing
2:
...
end;
 
B

beta

Unregistered / Unconfirmed
GUEST, unregistred user!
呵呵,多谢大家的关注。
HHSH 的方法的确是不错的,不过和我的第一种方法有一个相同的问题-不够直观
主要体现在 case 语句里面的 0:, 1:, 2: 等。
当然,这也是一个不错的方法。
再等等,看还有没有更有趣的方法:)
 
B

beta

Unregistered / Unconfirmed
GUEST, unregistred user!
呵呵,多谢大家的关注。
HHSH 的方法的确是不错的,不过和我的第一种方法有一个相同的问题-不够直观
主要体现在 case 语句里面的 0:, 1:, 2: 等。
当然,这也是一个不错的方法。
再等等,看还有没有更有趣的方法:)
 
W

wiseinfo

Unregistered / Unconfirmed
GUEST, unregistred user!
关注!!
 
G

gear1023

Unregistered / Unconfirmed
GUEST, unregistred user!
法三, 字符串转为枚举型
是个不错的方法,而且也很直观,可维护性高。
 

Similar threads

S
回复
0
查看
946
SUNSTONE的Delphi笔记
S
S
回复
0
查看
766
SUNSTONE的Delphi笔记
S
顶部