Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 国产日韩精品在线,91亚洲一区二区在线观看不卡,成人久久18免费网

          整合營(yíng)銷(xiāo)服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢(xún)熱線:

          Delphi基礎(chǔ)教程圖文版之泛型容器

          Delphi基礎(chǔ)教程圖文版之泛型容器

          方描述

          Unit that implements generic container classes to group data items in arrays, dictionaries, lists, stacks, queues, and more.

          譯文:實(shí)現(xiàn)泛型容器類(lèi)的單元,以在數(shù)組中對(duì)數(shù)據(jù)項(xiàng)進(jìn)行分組,詞典,列表,堆棧,隊(duì)列等。

          起初在接觸到Delphi的時(shí)候我以為沒(méi)有這一部分內(nèi)容,所有的都要自己實(shí)現(xiàn),此處請(qǐng)?jiān)徫业臒o(wú)知。。。。

          關(guān)于從那個(gè)版本開(kāi)始支持泛型的,我在官方文檔上沒(méi)有找到對(duì)應(yīng)的說(shuō)明,也可能是我英語(yǔ)太菜,在官網(wǎng)迷路了。

          根據(jù)百度得來(lái)的結(jié)果2007的版本沒(méi)有(真百度的)支持2009的版本(萬(wàn)一老師的博客上引用的也是這個(gè)版本)開(kāi)始出現(xiàn),也就是最早支持泛型容器的版本應(yīng)該是Delphi2009

          聊泛型容器避不開(kāi)的就是泛型的概念,之前看嗶哩嗶哩的網(wǎng)友留言從泛型一節(jié)就是開(kāi)始懵逼了。其實(shí)大可不必,泛型可以理解為一個(gè)變量,它的值是一個(gè)具體的類(lèi)型

          嗯,其實(shí)也可以把它當(dāng)作孫大圣,它可以變成任何東西

          Collections單元

          在這個(gè)單元內(nèi)一共定義了13個(gè)容器類(lèi),我們?cè)谄渲猩踔量梢钥吹骄€程隊(duì)列。那么問(wèn)題來(lái)了,我們需要精通或者學(xué)習(xí)所有的類(lèi)嗎?答案是否定的

          容器類(lèi)就我個(gè)人的理解其實(shí)一共有兩大表現(xiàn)形式,一種是列表形式的像數(shù)組,而另一種形式則以 Key,Value 成對(duì)的形式。也就是說(shuō)我們從中選擇兩個(gè)比較有代表性的類(lèi)進(jìn)行學(xué)習(xí)即可。下面是我選擇的兩個(gè)類(lèi)

          • System.Generics.Collections.TList:很明顯這個(gè)是列表
          • System.Generics.Collections.TDictionary:Dictionary這個(gè)單詞翻譯成中文是字典的意思,不知道為啥這么起名,它是K,V形式的代表

          注意:在單元內(nèi)我們還可以看到相似的類(lèi)例如 System.Generics.Collections.TObjectList<T> 和 System.Generics.Collections.TList<T>區(qū)別在于帶有Object的類(lèi)會(huì)在刪除元素時(shí)釋放對(duì)象,而沒(méi)有帶Object的不會(huì)釋放

          API代碼

          針對(duì)容器類(lèi)學(xué)習(xí)的總原則是圍繞增、刪、改、查這幾個(gè)核心的API功能即可,其他的就只能現(xiàn)用現(xiàn)查了,不知道別人寫(xiě)代碼是什么習(xí)慣,我寫(xiě)代碼的時(shí)候幫助文檔基本上都是開(kāi)著的。。。

          下面是針對(duì)兩個(gè)容器類(lèi)的代碼實(shí)現(xiàn)

          TList

          實(shí)體類(lèi)(TStudent)代碼

          type
          
              TStudent=class
              private
                  FName: string;
              public
                  property Name: string read FName write FName;
                  // 構(gòu)造方法
                  constructor Create; overload;
                  // 有參構(gòu)造方法
                  constructor Create(FName: string); overload;
              end;
          
          constructor TStudent.Create;
          begin
          
          end;
          
          constructor TStudent.Create(FName: string);
          begin
              Self.FName :=FName;
          end;
          
          

          操作類(lèi)(即增、刪、改、查),我沒(méi)有使用內(nèi)聯(lián),幾次想用都刪了

          uses
              System.Generics.Collections, System.SysUtils;
          
          var
              // 文檔上的定義是TList<T>,而我們的定義尖括號(hào)中的是TStudent,這就是泛型的用法
              StudentList: TList<TStudent>;
              // 循環(huán)中使用獲取TList成員
              Stu: TStudent;
          
          begin
              // 初始化學(xué)生列表
              StudentList :=TList<TStudent>.Create;
              StudentList.add(TStudent.Create('小強(qiáng)'));
              StudentList.add(TStudent.Create('蕭薔'));
              StudentList.add(TStudent.Create('小黑'));
              StudentList.add(TStudent.Create('小白'));
              StudentList.add(TStudent.Create('小黃'));
          
              // 開(kāi)始之前輸出一次
              for Stu in StudentList do begin
          
                  Writeln('學(xué)生信息是:' + Stu.Name);
              end;
          
              // 泛型容器自帶的刪除函數(shù),偷個(gè)懶
              StudentList.Delete(0);
          
              // 修改,查詢(xún)到指定的學(xué)生,修改其值即可
              StudentList.Items[0].Name :='小白';
          
          
              // 查詢(xún),其實(shí)和數(shù)組的操作沒(méi)有太大區(qū)別
              for Stu in StudentList do begin
          
                  Writeln('學(xué)生信息是:' + Stu.Name);
              end;
          
          end.
          

          TDictionary

          此類(lèi)容器的特點(diǎn)是 key 唯一,并且?guī)缀跛械牟僮鞫际歉鶕?jù) key 來(lái)的

          改造下實(shí)體類(lèi)(TStudent)增加一個(gè)屬性,代碼如下

          type
          
              TStudent=class
              private
                  FName: string;
                  FId: string;
              public
                  property Name: string read FName write FName;
                  property Id: string read FId write FId;
          
                  // 構(gòu)造方法
                  constructor Create; overload;
                  // 有參構(gòu)造方法
                  constructor Create(FName: string; FId: string); overload;
              end;
          
          constructor TStudent.Create;
          begin
          
          end;
          
          constructor TStudent.Create(FName: string; FId: string);
          begin
              Self.FName :=FName;
          end;
          

          操作類(lèi)(即增、刪、改、查)

          
          {注意單元的引用}
          uses
              System.Generics.Collections, System.SysUtils;
          
          var
              // 文檔上的定義是TList<T>,而我們的定義尖括號(hào)中的是TStudent,這就是泛型的用法
              StudentMap: TDictionary<string, TStudent>;
              // 循環(huán)中使用獲取TList成員
              Key: string;
              Student,Stu: TStudent;
          
          begin
              // 初始化學(xué)生列表
              StudentMap :=TDictionary<string, TStudent>.Create;
              // 此處的添加其實(shí)并不是太好,根據(jù)文檔描述,當(dāng)我們添加的元素的key已經(jīng)存在會(huì)拋出異常
              // 建議使用AddOrSetValue
              StudentMap.add('1001', TStudent.Create('1002', '小強(qiáng)'));
              StudentMap.add('1002', TStudent.Create('1001', '蕭薔'));
              StudentMap.add('1003', TStudent.Create('1003', '小黑'));
              StudentMap.add('1004', TStudent.Create('1004', '小白'));
              StudentMap.add('1005', TStudent.Create('1004', '小黃'));
          
              // 注意此處獲取是key,也就是1001 1002這些東西
              for Key in StudentMap.Keys do begin
          
                  // 獲取到key之后,再根據(jù)key獲取對(duì)應(yīng)value也就是學(xué)生對(duì)象
                  // 這里的獲取方式有點(diǎn)兒任性居然要的是一個(gè)指針,而不是直接返回
                  StudentMap.TryGetValue(Key, Student);
                  // 最好判斷一下,否則容易出現(xiàn)空指針
                  if (Student <> nil) then
                      Writeln('學(xué)生信息是:' + Student.Name)
              end;
          
              // 刪除元素,無(wú)論什么操作都是通過(guò)key去操作,因?yàn)閗ey是不可以重復(fù)的
              StudentMap.Remove('1005');
          
              // 修改,沒(méi)有就添加,有就更新
              StudentMap.AddOrSetValue('1004', TStudent.Create('1004', '小黃'));
          
              // 直接獲取value
              for Stu in StudentMap.values do begin
                  // 最好判斷一下,否則容易出現(xiàn)空指針
                  if (Stu <> nil) then
                      Writeln('學(xué)生信息是:' + Student.Name)
          
              end;
          end.
          

          參考資料

          萬(wàn)一的博客:https://www.cnblogs.com/del/category/113556.html

          官方文檔:http://docwiki.embarcadero.com/Libraries/Sydney/en/System.Generics.Collections

          ttp://www.gotapi.com/

          語(yǔ)言:英語(yǔ)

          簡(jiǎn)介:HTML,CSS,XPATH,XSL,JAVASCRIPT等API的查詢(xún)網(wǎng)站。

          http://www.w3schools.com/

          語(yǔ)言:英語(yǔ)

          簡(jiǎn)介:W3C制定的標(biāo)準(zhǔn)諸如XML,HTML,XSL等等的在線學(xué)習(xí)教程。

          http://www.xml.org.cn/

          語(yǔ)言:中文

          簡(jiǎn)介:可以說(shuō)是XML的中國(guó)官方網(wǎng)吧。W3C標(biāo)準(zhǔn)的翻譯組織與XML系列技術(shù)交流社區(qū).

          http://www.connectionstrings.com/

          語(yǔ)言:英語(yǔ)

          簡(jiǎn)介:這里幾乎收集了所有的數(shù)據(jù)庫(kù)連接字符(connectionstring)了。

          http://www.itpub.net/

          語(yǔ)言:中文

          簡(jiǎn)介:我個(gè)人認(rèn)為是國(guó)內(nèi)最專(zhuān)業(yè)的綜合性行業(yè)性技術(shù)類(lèi)社區(qū).

          http://www.netvtm.com/

          語(yǔ)言:中文

          簡(jiǎn)介:內(nèi)容多翻譯于w3schools.com,少有原創(chuàng)。不過(guò)還是應(yīng)該鼓勵(lì)精品翻譯。

          http://www.regexlib.com

          語(yǔ)言:英語(yǔ)

          簡(jiǎn)介:正則表達(dá)式庫(kù)。搜索正則表達(dá)式用。

          http://www.rexv.org/

          語(yǔ)言:英語(yǔ)

          簡(jiǎn)介:用Ajax開(kāi)發(fā)的在線正則表達(dá)式驗(yàn)證器.

          http://www.koders.com/

          語(yǔ)言:英語(yǔ)

          簡(jiǎn)介:代碼搜索引擎,可以搜索幾十種語(yǔ)言的代碼。

          http://www.123aspx.com/Rotor/

          語(yǔ)言:英語(yǔ)

          簡(jiǎn)介:.Net Frameworks的源代碼。

          語(yǔ)言:中文

          簡(jiǎn)介:孟憲會(huì)的資料站,雖資料大多比較簡(jiǎn)單,卻解決了開(kāi)發(fā)中的大部分問(wèn)題?!

          http://www.dofactory.com/Patterns/Patterns.aspx

          語(yǔ)言:英語(yǔ)

          簡(jiǎn)介:23種設(shè)計(jì)模式的實(shí)現(xiàn)參考。特點(diǎn)是UML+精練的示例代碼+簡(jiǎn)潔的解說(shuō)風(fēng)格。

          http://www.open-open.com/

          語(yǔ)言:中文

          簡(jiǎn)介:Java開(kāi)源大全,如果你用.NET,照著它的名字前加N找找應(yīng)該都有吧 ?!:)

          http://www.riacn.com/

          語(yǔ)言:中文

          簡(jiǎn)介:我認(rèn)為是國(guó)內(nèi)少有的RIA專(zhuān)業(yè)技術(shù)站于交流社區(qū).

          http://www.cnpaf.net/

          語(yǔ)言:中文

          簡(jiǎn)介:中國(guó)協(xié)議分析網(wǎng),很全面的協(xié)議資料網(wǎng)。

          http://www.pinvoke.net/

          語(yǔ)言:英語(yǔ)

          簡(jiǎn)介:通過(guò).net調(diào)用win32等非受控API的資料大全。

          http://bbs.51js.com/

          語(yǔ)言:中文

          簡(jiǎn)介:無(wú)憂(yōu)腳本,專(zhuān)業(yè)的腳本技術(shù)社區(qū)。

          http://www.c-sharpcorner.com/

          語(yǔ)言:英語(yǔ)

          簡(jiǎn)介:C# Corner,學(xué)習(xí)c#的好地方.

          http://blog.csdn.net/group/experts/

          語(yǔ)言:中文

          簡(jiǎn)介:CSDN專(zhuān)家群,匯集CSDN專(zhuān)家的電子報(bào).

          http://www.codeproject.com/

          語(yǔ)言:英語(yǔ)

          簡(jiǎn)介:有很多可學(xué)習(xí)的示例代碼,特點(diǎn)是豐富,深入淺出.

          http://www.gotdotnet.com/

          語(yǔ)言:英語(yǔ)

          簡(jiǎn)介:微軟開(kāi)發(fā)維護(hù)的關(guān)于.net framework交流社區(qū).

          http://www.sourceforge.net/

          語(yǔ)言:英語(yǔ)

          簡(jiǎn)介:全球最大的開(kāi)源軟體站點(diǎn)

          http://www.asp.net/QuickStart/

          語(yǔ)言:英語(yǔ)

          簡(jiǎn)介:Microsoft .NET Framework SDK QuickStart Tutorials

          http://www.matrix.org.cn/

          語(yǔ)言:中文

          簡(jiǎn)介:與 Java 共舞,Java優(yōu)秀的專(zhuān)業(yè)社區(qū),文章質(zhì)量很高.做.Net的朋友也可以從其借鑒很多知識(shí).

          JAVA學(xué)習(xí)模板——學(xué)習(xí)流程

          http://www.7zcn.com/javastep/StudyJavaInfo.html

          SUN中國(guó)技術(shù)社區(qū)

          http://developers.sun.com.cn/

          綜合網(wǎng)站 -

          數(shù)動(dòng)在線http://www.shudoo.com/(電腦報(bào)) -http://www.csdn.net/ -

          比特網(wǎng)IT知識(shí)庫(kù)http://know.chinabyte.com/index.php/%E9%A6%96%E9%A1%B5 -

          至頂網(wǎng)http://www.zdnet.com.cn/ -

          計(jì)世網(wǎng)http://www.ccw.com.cn/ -

          中國(guó)IT實(shí)驗(yàn)室http://www.chinaitlab.com/ -

          天極網(wǎng)http://www.yesky.com/ -

          賽迪網(wǎng)http://www.ccidnet.com/ -

          全球流量查詢(xún)http://www.alexa.com/ -

          Java網(wǎng)站 -

          Java軟件社區(qū)http://www.javaeye.com/ -

          java世紀(jì)網(wǎng)http://www.java2000.net/ -

          JAVABUGShttp://bugs.sun.com/JAVA漏洞 -

          http://www.mldnjava.cn/java.htm -

          HEY JAVA技術(shù)社區(qū)http://www.heyjava.com/ -

          ACCP教程網(wǎng)http://www.accptech.com/index.html

          論壇網(wǎng)站 -

          美河論壇http://www.eimhe.com/bbs/ -

          魔http://bbs.mldn.cn/ -

          http://bbs.chinajavaworld.com/index.jspa

          技術(shù)網(wǎng)站 -

          apache的ANThttp://ant.apache.org/bindownload.cgi -

          IBM http://www.ibm.com/developerworks/-

          IDE-

          Eclipse官網(wǎng)http://www.eclipse.org/downloads-

          MyEclipse官網(wǎng)http://www.myeclipseide.com/

          軟件測(cè)試

          軟件測(cè)試網(wǎng)http://www.51testing.com/

          1 程序員論壇:http://www.gxcxy.com

          2 J2me社區(qū) http://www.j2meforums.com/forum/

          3 csdn http://www.csdn.net/

          4 Vc知識(shí)庫(kù) http://www.vckbase.com/

          5 codeproject http://www.codeproject.com/

          6 程序員聯(lián)合開(kāi)發(fā)網(wǎng) http://www.pudn.com/

          7 看雪學(xué)院 http://www.pediy.com

          8 藍(lán)色理想 http://www.blueidea.com/

          9 博客園 http://www.cnblogs.com/

          10 Nuix應(yīng)用開(kāi)發(fā)社區(qū) http://chinaunix.net/

          11 javaeye http://www.javaeye.com

          12 It人網(wǎng) http://www.iteer.net/

          13 中國(guó)人才熱線 http://www.cjol.com/

          14 天涯論壇 http://www.tianya.cn/

          15 風(fēng)云的blog http://blog.codingnow.com/

          16 新浪科技頻道 http://tech.sina.com.cn/

          17 phpchina http://www.phpchina.com/html/index.html

          18 游戲開(kāi)發(fā)資源網(wǎng) http://www.gameres.com/

          19 網(wǎng)絡(luò)游戲第一門(mén)戶(hù) http://www.17173.com/

          20 我愛(ài)研發(fā)網(wǎng) http://www.52rd.com/

          21 Msdn中文網(wǎng) http://www.microsoft.com/china/MSDN/DeveloperCenter/default.mspx

          22 大富翁編程網(wǎng)站 http://www.delphibbs.com/

          23 Delphi盒子 http://www.2ccc.com/

          24 C++buillder研究 http://www.ccrun.com/

          25 It論壇 http://bbs.itren.cn/

          26 Java開(kāi)源大全 http://www.open-open.com/

          27 codegurn http://www.codeguru.com/

          28 編程愛(ài)好者 http://www.programfan.com/

          29 Java中文站 http://www.java-cn.com/

          30 reactos http://www.reactos.org/zh/index.htm

          31 開(kāi)源力量 http://www.opensourceforce.org/

          32 電腦編程技巧與維護(hù) http://www.comprg.com.cn/

          33 中國(guó)電子網(wǎng) http://21ic.com/

          34 編程中國(guó) http://www.bc-cn.net/

          35 嵌入式開(kāi)發(fā)論壇 http://www.cevx.com/bbs/

          36 電腦愛(ài)好者 http://www.cfan.com.cn/

          37 sybase中國(guó) http://www.sybase.com.cn/gvswse/site/china/index.jsp

          38 pbdr http://www.pbdr.com/

          39 apache http://www.apache.org

          40 rootkit http://www.rootkit.com/index.php

          41 驅(qū)動(dòng)開(kāi)發(fā)網(wǎng) http://www.driverdevelop.com/first.html

          42 安全焦點(diǎn) http://www.xfocus.net/

          43 cnbeta網(wǎng)友媒體與言論平臺(tái) http://www.cnbeta.com/

          44 fyter的博客 http://www.fyter.cn/Default.aspx

          45 asp.net控件 http://www.devexpress.com/

          46 operamask http://www.operamasks.org/

          47 中國(guó)源碼網(wǎng) http://www.yuanma.org/

          48 sawin軟件研發(fā)之窗 http://www.sawin.cn/

          49 電腦教育與WEB教育在線 http://210.40.7.188/

          50 中國(guó)dos聯(lián)盟 http://www.cn-dos.net/

          51 中國(guó)bios聯(lián)盟 http://www.biosren.com/index.php

          52 bioscentral http://bioscentral.com/

          53 eda專(zhuān)業(yè)論壇 http://www.edacn.net/bbs/

          54 諾基亞論壇 http://forum.nokia.com.cn/sch/index.html

          55 計(jì)算機(jī)科學(xué)論壇 http://www.ieee.org.cn/index.asp

          56 ibm developerworks 中國(guó) http://www.ibm.com/developerworks/cn/

          57 w3 http://www.w3.org/

          58 網(wǎng)頁(yè)設(shè)計(jì)師 http://www.w3cn.org/

          59 中國(guó)萬(wàn)維網(wǎng)聯(lián)盟 http://www.w3china.org/index.htm

          60 豆瓣 http://www.douban.com/

          61 程序員門(mén)戶(hù)站:http://www.gxcxy.com

          62 軟件商務(wù)網(wǎng) http://www.bizsofts.com/

          63 sun http://www.sun.com/

          64 google code http://code.google.com/

          65 google 開(kāi)發(fā)人員主頁(yè) http://code.google.com/intl/zh-CN/

          66 the official microsoft asp.net http://www.asp.net/

          67 microsoft IIS http://www.iis.net/default.aspx?tabid=1

          68 榮耀 http://www.royaloo.com/index.html

          69 侯捷網(wǎng)站 http://jjhou.csdn.net/

          70 java大本營(yíng) http://www.javadby.com/

          71 比特網(wǎng) http://www.chinabyte.com/

          72 51cto http://www.51cto.com/

          73 infoq http://www.infoq.com/

          74 博客堂 http://blog.joycode.com/

          75 嵌入式開(kāi)發(fā)網(wǎng) http://www.embed.com.cn/

          76 嵌入式開(kāi)線 http://www.mcuol.com/

          77 中嵌網(wǎng) http://www.chinaeda.cn/

          78 酷勤網(wǎng) http://www.kuqin.com/

          79 紅聯(lián)linux門(mén)戶(hù) http://www.linuxdiyf.com/

          80 itpub技術(shù)門(mén)戶(hù) http://www.itpub.net/

          81 程式設(shè)計(jì)俱樂(lè)部 http://www.programmer-club.com/index.asp

          82 uml軟件工程組織 http://www.uml.org.cn/index.asp

          83 delphi園地 http://www.delphifans.com/

          84 theserverside http://www.theserverside.com/

          85 中國(guó)donet俱樂(lè)部 http://www.chinaaspx.com/

          86 編程王 http://www.kingofcoders.com/

          87 it168 http://www.it168.com/

          88 open source software in c# http://csharp-source.net/

          89 中國(guó)IT實(shí)驗(yàn)室 http://www.chinaitlab.com/

          90 落伍者站長(zhǎng)論壇 http://www.im286.com/

          91 中國(guó)站長(zhǎng)站 http://www.chinaz.com/

          92 asp.net源碼下載專(zhuān)業(yè)站 http://www.51aspx.com/

          93 it職業(yè)工程師 http://www.51myit.com/

          94 太平洋電腦網(wǎng) http://www.pconline.com.cn/

          95 乘風(fēng)原創(chuàng)程序 http://study.qqcf.com/

          96 網(wǎng)易學(xué)院 http://tech.163.com/school/

          97 程序設(shè)計(jì)/程序開(kāi)發(fā)類(lèi)教程 http://www.pcvz.com/Program/Programs/Index.html

          98 算法源碼吧 http://www.sfcode.cn/

          99 codegurn http://www.codeguru.cn/

          100 得益網(wǎng) http://www.netyi.net/

          101 中國(guó)eclipse社區(qū) http://www.eclipseworld.org/bbs/

          102 項(xiàng)目管理者聯(lián)盟 http://www.mypm.net/

          103 棲息谷 http://www.21manager.com/

          104 J2me開(kāi)發(fā)網(wǎng) http://www.j2medev.com/bbs/index.asp

          105 卓越亞馬遜 http://www.amazon.cn/

          WEB技術(shù):

          WEB前端開(kāi)發(fā) http://www.css88.com/

          Ext JS官方網(wǎng) http://www.extjs.com/

          Ext JS中文資料 http://www.extjs.org.cn/

          義:不同的地理信息系統(tǒng)或地理信息系統(tǒng)與其他信息系統(tǒng)之間實(shí)施數(shù)據(jù)雙向交換時(shí)采用的數(shù)據(jù)格式

          引自百度百科

          據(jù)百度百科上的描述數(shù)據(jù)交換這個(gè)詞最早是在《地理信息系統(tǒng)名詞》第二版,很明顯不是用來(lái)做編程的。在編程方面數(shù)據(jù)交換格式僅僅是一種格式,當(dāng)前主流使用的格式有 3 種 : XML、JSON、YAML

          既然是一種格式,那么它就需要標(biāo)準(zhǔn),因?yàn)橥ㄟ^(guò)標(biāo)準(zhǔn)可以限定各個(gè)格式中的具體內(nèi)容

          XML

          XML(全稱(chēng)EXtensible Markup Language),在我看來(lái)它是一種古老的數(shù)據(jù)交換格式,因?yàn)閺奈医佑|到編程開(kāi)始它就已經(jīng)存在了

          標(biāo)準(zhǔn)所在網(wǎng)址:https://www.w3.org/TR/1998/REC-xml-19980210

          最新文檔地址:https://www.w3.org/TR/REC-xml/

          其實(shí)XML的標(biāo)準(zhǔn)一直是1.0,至少我沒(méi)有見(jiàn)過(guò)其他的,一般情況下我們?cè)诰帉?xiě)XML文檔的時(shí)候都需要遵循一個(gè)約束文件,這個(gè)約束文件中規(guī)定了你可以編寫(xiě)的內(nèi)容。約束文件存在的方式也有兩種,原來(lái)是 DTD 格式現(xiàn)在主流的是 Schema

          XML 如果想完整的學(xué)習(xí)還是比較費(fèi)勁的,不過(guò)一般情況下要求約束文檔能看懂,XML內(nèi)容會(huì)編寫(xiě)即可

          參考網(wǎng)址:https://www.w3school.com.cn/x.asp

          Delphi解析可使用 TXMLDocument(Delphi自帶),此外也可以使用微軟的 MSXML2 我沒(méi)有這種需求所以并沒(méi)有深入研究

          官方文檔:http://docwiki.embarcadero.com/Libraries/Sydney/en/Xml

          JSON

          JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式。相比于XML格式JSON更為簡(jiǎn)單明了

          標(biāo)準(zhǔn)文檔地址:http://www.json.org/json-zh.html

          具體的語(yǔ)法規(guī)則可以參考上面網(wǎng)址的文檔內(nèi)容,中文的

          Delphi官方(當(dāng)前最新版本DelphiXE10.4.2)已經(jīng)支持對(duì)于JSON的解析了,官方文檔地址

          http://docwiki.embarcadero.com/Libraries/Sydney/en/System.JSON

          需要注意的是有些類(lèi)是Tokyo 10.2新增的,在使用的時(shí)候需要檢查一下自己的版本

          YAML

          YAML (全稱(chēng)YAML Ain’t Markup Language),YAML不是標(biāo)記語(yǔ)言的意思,YAML是便于人閱讀基于unicode 編碼的各種語(yǔ)言的序列號(hào)標(biāo)準(zhǔn)。

          YAML語(yǔ)言的設(shè)計(jì)參考了JSON,XML和SDL等語(yǔ)言。YAML 強(qiáng)調(diào)以數(shù)據(jù)為中心,簡(jiǎn)潔易讀,編寫(xiě)簡(jiǎn)單

          官網(wǎng)地址:http://yaml.org

          一個(gè)讓人頭皮發(fā)麻的站點(diǎn)

          學(xué)習(xí)的話(huà)可以參考 阮一峰 老師的博客內(nèi)容,地址:https://www.ruanyifeng.com/blog/2016/07/yaml.html

          沒(méi)有找到官方支持,不過(guò)在GitHub上有一個(gè)開(kāi)源庫(kù)是支持Delphi解析YAML格式數(shù)據(jù)的,有興趣的朋友可以去研究

          地址:https://github.com/neslib/Neslib.Yaml

          最后我想說(shuō)我非常討厭這種數(shù)據(jù)格式,和python一樣依靠縮進(jìn)和空格控制語(yǔ)法。。。

          JSON解析案例

          將原來(lái)視頻中講解的代碼在DelphiXE10.4.2上進(jìn)行了重構(gòu)

          uses
              System.JSON, System.Generics.Collections, System.JSON.Serializers,
              System.SysUtils;
          
          type
              { 實(shí)體類(lèi),主要是用于JSON字符串和類(lèi)對(duì)象的互相轉(zhuǎn)換 }
              TStudent=class(TObject)
              private
                  FName: string;
                  FAge: Integer;
              public
                  property Name: string read FName write FName;
                  property Age: Integer read FAge write FAge;
                  constructor Create; overload;
                  constructor Create(FName: string; FAge: Integer); overload;
          
              end;
          
          constructor TStudent.Create;
          begin
          
          end;
          
          constructor TStudent.Create(FName: string; FAge: Integer);
          begin
              Self.FName :=FName;
              Self.FAge :=FAge;
          end;
          
          begin
              { 定義一個(gè)JSON字符串 }
              var
              UserJson :='{"FName":"小黑","FAge":18}';
              { 創(chuàng)建序列化對(duì)象 }
              var
              Serializer :=TJsonSerializer.Create();
          
              { 反序列化,其實(shí)就將字符串轉(zhuǎn)為對(duì)象 }
              var
              Student :=Serializer.Deserialize<TStudent>(UserJson);
              Writeln('反序列化:' + Student.Name + ',' + Student.Age.ToString);
          
              { 列表轉(zhuǎn)換,將TLIst容器轉(zhuǎn)為字符串,也可以說(shuō)是數(shù)組轉(zhuǎn)換 }
          
              var
              List :=TList<TStudent>.Create;
              List.Add(TStudent.Create('小白', 30));
              List.Add(TStudent.Create('蕭薔', 30));
              // 創(chuàng)建序列化對(duì)象
              Serializer :=TJsonSerializer.Create();
          
              Writeln('序列化:' + Serializer.Serialize < TList < TStudent >> (List));
          
              var
                  { 一個(gè)比較復(fù)雜的json字符串 }
              Users :='{"FListHelper":{"FCount":2},"FItems":[{"FName":"小白","FAge":30},{"FName":"蕭薔","FAge":30}],"FComparer":{}}';
              // 創(chuàng)建序列化對(duì)象
              Serializer :=TJsonSerializer.Create();
              { 可以嘗試下這里會(huì)不會(huì)有問(wèn)題,當(dāng)字段匹配時(shí)居然可以直接轉(zhuǎn)換 }
              var
              UserList :=Serializer.Deserialize < TList < TStudent >> (Users);
          
              for var Stu in UserList do begin
                  Writeln('反序列化:' + Stu.Name + ',' + Stu.Age.ToString);
              end;
          
              { 獲取指定字段 }
              Writeln(TJSONObject.ParseJSONValue(Users).GetValue<TJSONObject>
                ('FListHelper').GetValue<string>('FCount'));
          
              Writeln(TJSONObject.ParseJSONValue(Users).GetValue<TJSONArray>('FItems')
                .Count.ToString);
          
              Readln;
          
          end.
          

          其實(shí)Delphi自帶的JSON解析已經(jīng)夠用了,如果不能滿(mǎn)足你的話(huà)有一個(gè)開(kāi)源庫(kù)你可以嘗試,不過(guò)我看它最近一次更新代碼是 3 年前....

          Github地址:https://github.com/hgourvest/superobject

          學(xué)習(xí)資料(萬(wàn)一老師的博客):https://www.cnblogs.com/del/category/215158.html


          主站蜘蛛池模板: 日韩精品一区二区三区影院 | 国产精品av一区二区三区不卡蜜 | V一区无码内射国产| 亚洲日韩国产精品第一页一区| 日韩精品区一区二区三VR| 国产在线一区观看| 老熟妇仑乱一区二区视頻| 国产免费播放一区二区| 蜜桃视频一区二区| 韩国福利视频一区二区| 亚洲精品一区二区三区四区乱码| 亚洲综合色自拍一区| 人妻无码一区二区视频| 日本一道一区二区免费看| 3d动漫精品一区视频在线观看| 无码毛片一区二区三区视频免费播放 | 亚洲一区二区无码偷拍| 亚洲福利一区二区| 亚洲va乱码一区二区三区| 亚洲成AV人片一区二区| 91一区二区三区| 日韩精品人妻一区二区中文八零| chinese国产一区二区| 变态拳头交视频一区二区| 精品乱子伦一区二区三区高清免费播放 | 一区二区三区杨幂在线观看| 视频一区二区三区在线观看| 福利片免费一区二区三区| 国产成人一区二区动漫精品| 国产在线视频一区二区三区| 精品在线一区二区| 成人无码一区二区三区| 亚洲一区二区三区自拍公司| 亚洲国产精品一区二区第一页 | 日韩亚洲AV无码一区二区不卡 | 日韩一区二区三区免费播放| 日本美女一区二区三区| 好爽毛片一区二区三区四| 亚洲av无码一区二区三区乱子伦| 亚洲乱码一区av春药高潮 | 无码囯产精品一区二区免费 |