1. 程式人生 > >Delphi容器類之---TList、TStringList、TObjectList,以及一個例程的程式碼分析

Delphi容器類之---TList、TStringList、TObjectList,以及一個例程的程式碼分析

  看了這裡標題,大家可能以為我會談TListBox控制元件,那就錯了。我要談的是Delphi提供給我們的具有列表性質的類:TStringList、TList和TObjectList。TStringList用來存放字串,TList存放指標,而TObjectList則存放物件(Object)

  在我們使用Delphi的過程中,有很多資料的儲存是要靠 陣列解決的。雖然Delphi現在已經支援了可變陣列,不過總有那麼點缺陷:我們不能在刪除一個項之後,使後邊的專案自動前靠。因此,說說Delphi現成的List還是很有價值的。

TStringList                   

  TStringList原始碼在 classes.pas裡面。

Text屬性和Strings屬性

  在TStringList裡面,那些String被一行一行地儲存存。TStringList.Text返回全部的String。如果第一、二、三行分別是/'aa/'、/'bb/'、/'cc/'的話,那麼Text返回的是“/'aa/'+#13#10+/'bb/'+#13#10+/'cc/'+#13#10” (不包括雙引號 )。所有的String都被TStringList用回車符和換行符(#13#10)連線起來。如果一次向Text賦值的話,Text就會被自動地分割成儲存在TStringList裡。這裡充分地體現出TStringList的一個很實用的價值:它能讓我們逐行處理String。假如我們要操作第4行,只需要操作TStringList[3]。相信大家會問,TStringList明明是一個類,為什麼能當陣列那樣子用呢?其實,我們在寫TStringList[3]的時候,就是在寫TStringList.Strings[3]。Strings是TStringList的一個預設屬性。陣列性的預設屬性就是這樣子使用的。如果大家在編寫類的時候要使用到這麼一個功能的話,刻意參考如方法

1 2 property AProperty[I: Integer] read *** write ***; default;

  Strings是一個可讀寫的屬性。這也就是說,大家並不僅可以獲取第N行的內容,也可以改變第N行的內容。因此我們需要知道TStringList裡String的總數。TStringList的屬性Count則可以滿足我們的需求。

  上面已經說過,Text是返回所有字串的屬性。向Text賦值時,TStringList能夠自動地把Texxt分成一行一行的,然後儲存在TStringList裡(當然,TStringList裡面並不完全時這麼儲存的,詳細的過程可以參見TStringList和TStrings的程式碼)。這樣,Strings返回的字串就是沒有回車和換行的。但是,如果我們向Strings賦值的字串有回車和換行,那麼會出現什麼情況呢?此時,Strings就會把哪個字串斷成幾行,插入到原來的位置上。如果TStringListt只有這麼些功能的話,那我就不必專門拿出來講了——我是說,TStringList能讓我們任意地插入或刪除某行,這就要用到TStringList提供的方法

  TStringList裡的每一個字元都有自己的位置標號(從0開始)。

Add和Append方法                

1 2 function Add(const S: String): Integer; procedure Append(const S: String);

   Add方法向TStringList的尾行新增一行String(在這裡和下面我們都假設輸入的字串沒有回車和換行,否則Strings將被分割)。引數S代表的是要插入的字串的內容。Add的返回值代表了新的字串在TStringList的位置——也就是最後一行的位置,即新的Count減去一。

  Append方法和Add唯一不同的地方就是沒有返回值。

Insert方法                    

1 procedure Insert(Index: Integerconst S: String);

   Insert方法向TStringList插入一行字串。在Insert裡,我們可以自由地選擇字串插入的位置。引數S代表要插入的字串的內容,Index代表要插入的位置。

Delete方法                    

1 procedure Delete(Index: Integer);

  Delete方法刪除某行字串,我們同樣可以自由地選擇刪除任意一行字串。引數Index代表要刪除的那一行字串的位置。

  0是第一個資料。

IndexOf方法                   

1 function IndexOf(const S: String): Integer;

   IndexOf查詢某一字串在TStringList裡的位置。引數S代表要查詢的字串。如果TStringList裡面不存在S的話,則返回-1。

Move和Exchange方法              

1 2 procedure Move(CurIndex, NewInddex: Integer

相關推薦

Delphi容器---TListTStringListTObjectList以及一個程式碼分析

  看了這裡標題,大家可能以為我會談TListBox控制元件,那就錯了。我要談的是Delphi提供給我們的具有列表性質的類:TStringList、TList和TObjectList。TStringList用來存放字串,TList存放指標,而TObjectList則存

Delphi容器---TlistTStringlistTHashedStringlist的效率比較

本人在做一個測試,伺服器是IOCP的,我假定最大連線數是50000個。如果每個連結之間的資料需要伺服器中轉的話,那麼我需要一個數據容器儲存使用者的關鍵資料和連結。以上是測試背景。剛剛我簡單的做了一段簡單的程式碼,關鍵程式碼段如下:RTest = record    Key:

Qt程式碼分析basicshapes-cpp

由於畢業設計設計機器人模擬,但一直想學習Qt。於是,痛下決心,從MFC平臺轉移到Qt上來。現在開始學習如何使用Qt 3D做一個機器人模擬環境出來。分析了一下教程的例程,不是很難,但為了以後查閱方便,所以現在這裡。 下面是例程的執行結果: 我選擇這個例子是因為許多例程中直接是顯示

java工具Excel檔案匯入讀取資料(支援xls和xlsx)

所需的jar包:poi的jar包儘量保持一致,不然會報版本不一致的錯誤下面是程式碼:package ReadExcel; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.

C++順序容器中物件初始化賦值swap

順序容器中,對於初始化物件,除了使用列表和一對迭代器初始化物件時,列表中元素和求迭代器所引用的值跟初始化的物件相容即可。其他的都需要保證型別完全相同 至於賦值,C++順序容器來還定義了一個assig

Delphi 小談TList

最近開發程式需要使用TList功能,轉載此文章,以作參考。 看了這裡標題,大家可能以為我會談TListBox控制元件,那就錯了。我要談的是Delphi提供給我們的具有列表性質的類:TstringList、TList和TObjectList。TstringList用來存放字

[python] 連接MySQL以及多線多進連接MySQL續

python mysqldb dbutils pooleddb之前參照他人的做法,使用DBUtils.PooledDB來建立多個可復用的MySQL連接,部分文章有誤,方法不當,導致我走了很多彎路,專研幾天後,終於找到了正確的使用方法。網上有很多使用DBUtils.PooledDB模塊建立連接池,再加threa

2018/11/03-棧x86架構和暫存器-《惡意程式碼分析實戰》

  棧用於函式的記憶體、區域性變數、流控制結構等被儲存在棧中。棧是一種用壓和彈操作來刻畫的資料結構,向棧中壓入一些東西,然後再把他們彈出來。它是一種先入後出(LIFO)的結構。   x86架構有對棧的內建支援。用於這種支援的暫存器包括ESP和EBP。其中,ESP是棧指標,包含了指向棧頂的記憶體地址。一些東西

普通索引和唯一索引的區別性能差異以及其他索引簡介

整數 排列 唯一索引 同名 關聯 超過 結果 其它 加載 唯一索引和普通索引使用的結構都是B-tree,執行時間復雜度都是O(log n)。 1、普通索引  普通索引(由關鍵字KEY或INDEX定義的索引)的唯一任務是加快對數據的訪問速度。因此,應該只為那些最經常出現在查

數學不好英語不好非本專業想學Python數據分析有救嗎?

基礎 遊戲 趣味性 問題: water pro 計算機 工具 對數 “非本專業想轉型做數據分析,有救嗎?” “數學不好,英語不好,想學Python數據分析,有救嗎?”? “不懂Python數據分析到底是什麽,有救嗎?” 我的答案是?妥妥有救! 大家好,我是大鵬,目前在城市

dubbo中registryroutedirectoryclusterloadbalanceroute的關系以及一個引用操作和調用操作到底幹了啥

本質 parameter conf 自己的 序列 gis 什麽 lis 第一次 zk是比較典型場景,所以註冊中心都是以zk作為例子的 1 對於registry,提供者沒有這個,消費者才有。為什麽? 因為只有消費者才需要去註冊中心拿到provide的信息,而provide

關於微信小程式unionIDOpenID的區別以及如何獲取

看圖 問: 1:小程式裡面為什麼要使用OpenID,有什麼意義? 2:小程式既然有了OpenID,為何還要unionID? 答:以下是我個人看法,如有不對地方請指出 1:微信小程式為什麼會有OpenID,其實在微信小程式裡面OpenID,就代表著我們一個人,擁有一個身份證一樣的東

php使用新浪雲Storage儲存上傳下載檔案建立bucketBucket 操作Object 上傳操作Object 下載操作Object 刪除操作Object 複製操作生成一個外網能夠訪

<?php //新浪雲 Storage PHP use use sinacloud\sae\Storage as Storage; // 方法一:在新浪雲執行環境中時可以不傳認證資訊,預設會從應用的環境變數中取 $s = new Storage();

【資料結構】用模版實現大小堆實現優先順序佇列以及堆排序

    一、用模版實現大小堆    如果不用模版的話,寫大小堆,就需要分別實現兩次,但是應用模版的話問題就簡單多了,我們只需要實現兩個仿函式,Greater和Less就行了,仿函式就是用類實現一個()的過載就實現了仿函式。這個看下程式碼就能理解了。再設計引數的時候,需要把模版

docker(包括dockermysqltomcat的安裝以及部署web工程檔案)

本文是在我查看了很多前輩的部落格上完成的有很多借閱的成分,主要記錄docker從安裝到部署Javaweb程式的整個過程,希望對有需要的人有所幫助,我是個菜鳥,望多多包涵。 CentOS 07 Docker 安裝   使用Ctrl+alt在虛擬機器和Windows切換滑鼠,直接複製文件裡的指令。

bash學習之一:登陸非登陸shell互動非互動shell以及它們的startup檔案

家目錄下的配置檔案.bashrc中rc的含義是resource configuration 什麼是登陸shell?什麼是非登陸shell? 登陸shell是指:(1)使用者登陸時,輸入使用者名稱和密碼後啟動的shell;(2)通過帶--login引數的命令:bash --lo

微信小程式canvas畫圖文字字型換行以及儲存圖片到本地的坑

頁面 :  <canvas style="width: 376px; height: 530px; background-color:#ddd;position:absolute;left:-1000px;" canvas-id="myCanvas"></

localStoragesessionStorage詳解以及storage事件使用

有關localStorage和sessionStorage的特性。 localStorage本身帶有方法有   新增鍵值對:localStorage.setItem(key,value),如果key存在時,更新value。   獲取鍵值:localStorage.getItem(key),如果key不存在返回

目錄樹的資料庫設計java後臺讀取以及前臺javascript的顯示

—–整理自凋落學長的筆記 我們網站肯定經常用到目錄樹 樹在java web專案中的應用 ,主要是用來儲存目錄。 即這種: 這個 應該是從資料庫查出來的 而不是寫死在頁面上的 如果每一個目錄下 都可以有0-n個目錄 是無限級別的 是儲

SynchronizedLockReentantLock的區別以及用法

最近在看《Java併發程式設計的藝術》,書中不少知識是更深入的去講解我們平時經常使用的併發實現機制,介紹了它們的實現原理和區別,讀完之後真的有種醍醐灌頂的感覺,突然就好像明白了這些實現到底是幹什麼用、什麼時候去用,今天我就來總結一下其中的一個知識點——Synchronized