於Delphi的Case述句中使用字串當作判別變數 (轉)
於的Case述句中使用字串當作判別變數:namespace prefix = o ns = "urn:schemas--com::office" />
陳佳新╱to:jarsing@cina.chu.edu.tw">jarsing@cina.chu.edu.tw
● 前言
提到Case述句(statement),我們首先會聯想到的應用案例莫過於就是透過一個判別變數,讓程式流程依照不同的條件狀況來選擇符合的路徑繼續執行下去。或者是,當我們的程式中出現了一連串的if與 else if述句組合時,我們也經常都會想到要利用Case述句來簡化程式碼並藉以提升其可讀性與執行。
但是在某些情況下,Case述句並無法應用於我們的程式當中,因為其所允許接受的判別變數僅限於任何形式的咚閌劍╡xpression)與序數型別(ordinal type),這所謂的「序數型別」指的就是整數、字元、列舉、布林和集合等「有次序」的,而且可以應用於諸如Ord()、Pred()、Succ()、Low()與High()等函示的型別(請參閱[1])。
不幸的是,字串(string)顯然並非序數型別的一種,而在某些時候(底下馬上會舉例),當條件變數的型別是字串而且條件分支又相當多時,儘管無奈,然而除了使用大量的if與else if述句之外,似乎也別無他法了,唉。
例如下面的程式碼在Delphi中便不被允許:
#001 var
#002 Str: String; // 宣告String型別的判別變數
#003 begin
#004 case Str of // 錯誤訊息: Ordinal type required
#005 // ...
#006 end;
#007 end;
這根本就無法透過編譯嘛,因此傳統的解決方案通常是將之轉換為大量的if與else if述句的組合體。此時真希望我們用的是,因為下面的程式碼是可被其編譯器允許的(請參閱[5]):
#001 Dim Str As String ' 宣告String型別的判別變數
#002 Case Str ' 等同於Delphi的Case述句
#003 '...
#004 End Select ' OK, 透過編譯
於是在本文中,筆者試圖以此問題為出發點,在「除了轉換為if與else if述句組合的傳統解決方案之外」找尋其他可行的因應之道,並由衷地希望本文對於面臨此問題而亟欲尋求解決方法的人(看了[12]-[14]之後,筆者更發現確實如此)能夠有所幫助。
先預告一下好了,筆者打算介紹7種解決方案,其中前5種方法乃是節錄或延伸自[9]-[13]的內容,而第6種則是筆者實作的綜合性多載化(overloading)版本。這些方案分別是:
v 方案一:搜尋字串陣列
v 方案二:使用實數
v 方案三:利用雜湊函式
v 方案四:巢套case述句
v 方案五:使用TStringList
v 方案六:實作多載函示
v 方案七:應用現成函示
本文將從複習條件述句(內容主要參考[1]與[4])與認識字串(內容主要參考[2])等主題開始,熟悉Delphi者可略過此部分,直接閱讀〈效能議題〉小節直到文末為止。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1007732/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- js判斷一個變數是否為字串型別JS變數字串型別
- 相當於delphi的日曆控制元件 (轉)控制元件
- delphi中的字串處理,以及幾個字串型別的說明。 (轉)字串型別
- delphi中關於字串的操作字串
- 如何判斷變數型別變數型別
- Case when 支援變數變數
- javascript中如何判斷變數的型別?JavaScript變數型別
- JavaScript 中對變數型別的判斷JavaScript變數型別
- oracle只有當where子句中所有條件都使用"=:"才認為是使用繫結變數麼?Oracle變數
- Action Recognition——基於表示的動作識別綜述
- javascript中對變數型別的判斷方法JavaScript變數型別
- JavaScript判斷變數型別的四種方法JavaScript變數型別
- 字串:怎樣轉換字串為數字型別? (轉)字串型別
- 轉貼_使用10046事件獲取SQL語句中繫結變數的具體值事件SQL變數
- js如何判斷一個變數是數字還是數字字串JS變數字串
- 字串:怎樣將數字型別轉換為字串 (轉)字串型別
- Delphi字串的引用計數與生命週期字串
- 判斷迴文串 字串/數字相互轉換字串
- Action Recognition——基於深度學習的動作識別綜述深度學習
- php中empty()、isset()、is_null()和變數本身的布林判斷區別(轉)PHPNull變數
- 如何判斷一個字串是否為純數字的問題,當然也可以判斷一個字串是否為純字母字串
- 變數型別轉換變數型別
- javascript判斷變數是否是數值型別程式碼JavaScript變數型別
- JavaScript 字串轉換數值型別JavaScript字串型別
- 【轉】Java中判斷字串是否為數字的五種方法Java字串
- 關於php依據使用者當前定位判斷距離最近的商家或者別的PHP
- Python迴圈語句中的索引變數作用域Python索引變數
- Oracle字串資料型別簡述Oracle字串資料型別
- 使用case實現成績優良差的判斷
- 判斷javaScript變數是Ojbect型別還是Array型別JavaScript變數型別
- Delphi 程式碼最佳化——字串篇 (轉)字串
- js判斷變數是不是數字型別程式碼例項JS變數型別
- 關於Delphi中預編譯指令的使用方法 (轉)編譯
- 關於繫結變數的使用變數
- javascript判斷變數的資料型別程式碼例項JavaScript變數資料型別
- Delphi 中的字串——《Delphi6 開發人員指南》讀書筆記 (轉)字串筆記
- 字串、數值 等型別的相互 安全轉換字串型別
- Delphi中用於讀寫(I/O)的三種檔案型別 (轉)型別