跳到主要內容

發表文章

目前顯示的是 八月, 2016的文章

Delphi 免寫 FreeAndNil 的方法

最近看到一篇關於葡萄牙人寫的文章:FreeAndNil... Esqueça

內文是說明在物件導向的時代,JAVA、C# 這類的語言都有垃圾自動回收機制,進化中的 Delphi 其實也有。

接著便開始說明了使用 FreeAndNil 讓我們的原始碼非常噁心的經過。


提出的解法是使用 Interface!


原先我們的寫法可能是:

泛型(Generic)容器的小技巧

在Delphi 2009開始便加入了【泛型容器】相關類別,如下所列:

TList,TObjectListTQueue,TObjectQueueTStack,TObjectStackTDictionary,TObjectDictionary
不過也只知道可以放像是「string, Integer, TComponent」等,基本型別或是物件都可以自由宣告使用。

乍看下和 TStringList 重疊率很高啊,如果是宣告TList,居然不能使用以下的函式:
CommaTextDelimitedText 
不能用這兩個常用率特高的函式感覺很廢啊。泛型容器到底有什麼好用的?

一直到需要放置物件時,才開始覺得泛型容器超好用。


[整理]如何計算出一個字元,在一個字串中出現的次數

字元(Char)計數
function OccurrencesOfChar(const S: string; const C: char): integer; var i: Integer; begin result := 0; for i := 1 to Length(S) do if S[i] = C then inc(result); end;


字串(String)計數
function Occurrences(const Substring, Text: string): integer; var offset: integer; begin result := 0; offset := PosEx(Substring, Text, 1); while offset <> 0 do begin inc(result); offset := PosEx(Substring, Text, offset + length(Substring)); end; end;
資料來源:
How to count number of occurrences of a certain char in string?Delphi: count number of times a string occurs in another string