Vrste nizov v Delphiju (Delphi za začetnike)

moški, ki uporablja prenosni računalnik

Vir slike RF/Cadalpe/Getty Images





Kot pri vsakem programskem jeziku, v Delphi , spremenljivke so ograde za shranjevanje vrednosti; imajo imena in vrste podatkov. Podatkovni tip spremenljivke določa, kako so biti, ki predstavljajo te vrednosti, shranjeni v pomnilniku računalnika.

Ko imamo spremenljivko, ki bo vsebovala neko matriko znakov, jo lahko razglasimo za tip Vrvica .
Delphi ponuja zdravo izbiro nizovnih operaterjev, funkcij in postopkov. Preden spremenljivki dodelimo podatkovni tip String, moramo temeljito razumeti štiri vrste nizov Delphi.



Kratka vrvica

Enostavno povedano, Kratka vrvica je prešteta matrika (ANSII) znakov z do 255 znaki v nizu. Prvi bajt te matrike shrani dolžino niza. Ker je bil to glavni niz v Delphiju 1 (16-bitni Delphi), je edini razlog za uporabo kratkega niza združljivost za nazaj.
Za ustvarjanje spremenljivke tipa ShortString uporabimo:

|_+_|


The s spremenljivka je kratek niz, ki lahko vsebuje do 256 znakov, njen pomnilnik je statično dodeljenih 256 bajtov. Ker je to običajno potratno - malo verjetno se bo vaš kratek niz razširil na največjo dolžino - drugi pristop k uporabi kratkih nizov uporablja podtipe kratkega niza, katerih največja dolžina je od 0 do 255.



|_+_|

To ustvari spremenljivko, imenovano ssmall katerih največja dolžina je 50 znakov.

Opomba: Ko dodelimo vrednost spremenljivki Kratek niz, se niz skrajša, če presega največjo dolžino za vrsto. Ko posredujemo kratke nize neki Delphijevi rutini za obdelavo nizov, se ti pretvorijo v dolge nize in iz njih.

Vrvica / dolga / Ansi

Delphi 2 prenesen v Object Pascal Dolga vrvica vrsta. Dolgi niz (v Delphijevi pomoči AnsiString) predstavlja dinamično dodeljen niz, katerega največja dolžina je omejena samo z razpoložljivim pomnilnikom. Vse 32-bitne različice Delphija privzeto uporabljajo dolge nize. Priporočam uporabo dolgih vrvic, kadar koli je to mogoče.

|_+_|

The s spremenljivka lahko vsebuje od nič do poljubnega praktičnega števila znakov. Niz se poveča ali skrči, ko mu dodelite nove podatke.



Uporabimo lahko katero koli spremenljivko niza kot niz znakov, drugi znak v s ima indeks 2. Naslednja koda

|_+_|

dodeli T drugemu znaku os s spremenljivka. Zdaj nekaj prvih likov v s izgleda kot: TTe s str... .
Naj vas ne zavede, ne morete uporabiti s[0] za ogled dolžine niza, s ni ShortString.



Štetje referenc, kopiranje ob pisanju

Ker dodeljevanje pomnilnika izvaja Delphi, nam ni treba skrbeti za zbiranje smeti. Pri delu z dolgimi (Ansi) nizi Delphi uporablja štetje referenc. Na ta način je kopiranje nizov dejansko hitrejše za dolge nize kot za kratke nize.
Štetje referenc na primeru:

|_+_|

Ko ustvarimo niz s1 spremenljivko in ji dodeli neko vrednost, Delphi dodeli dovolj pomnilnika za niz. Ko kopiramo s1 do s2 , Delphi ne kopira vrednosti niza v pomnilnik, ampak samo poveča število sklicev in spremeni s2 da kaže na isto pomnilniško lokacijo kot s1 .



Za zmanjšanje kopiranja, ko posredujemo nize rutinam, Delphi uporablja tehniko kopiranja ob pisanju. Recimo, da želimo spremeniti vrednost s2 spremenljivka niza; Delphi kopira prvi niz na novo pomnilniško lokacijo, saj mora sprememba vplivati ​​samo na s2, ne na s1, in oba kažeta na isto pomnilniško lokacijo.

Široka vrvica

Široki nizi so tudi dinamično dodeljeni in upravljani, vendar ne uporabljajo štetja sklicev ali semantike kopiranja ob pisanju. Široki nizi so sestavljeni iz 16-bitnih znakov Unicode.



O naborih znakov Unicode

Nabor znakov ANSI, ki ga uporablja Windows, je enobajtni nabor znakov. Unicode shrani vsak znak v naboru znakov v 2 bajtih namesto v 1. Nekateri nacionalni jeziki uporabljajo ideografske znake, ki zahtevajo več kot 256 znakov, ki jih podpira ANSI. S 16-bitnim zapisom lahko predstavimo 65.536 različnih znakov. Indeksiranje večbajtnih nizov ni zanesljivo, saj s[i] predstavlja i-ti bajt (ne nujno i-ti znak) v s .

Če morate uporabiti široke znake, morate spremenljivko niza prijaviti za vrsto WideString, vašo spremenljivko znakov pa za vrsto WideChar. Če želite preučiti širok niz en znak naenkrat, ne pozabite preizkusiti večbitnih znakov. Delphi ne podpira samodejnih pretvorb tipov med vrstama nizov Ansi in Wide.

|_+_|

Null prekinjeno

Niz z ničelnim ali ničelnim zaključkom je niz znakov, indeksiran s celim številom, ki se začne od nič. Ker matrika nima indikatorja dolžine, Delphi za označevanje meje niza uporablja znak ASCII 0 (NULL; #0).
To pomeni, da v bistvu ni razlike med nizom, ki se konča z ničlo, in matriko [0..NumberOfChars] tipa Char, kjer je konec niza označen z #0.

V Delphiju uporabljamo nize z ničelnimi zaključki, ko kličemo funkcije Windows API. Object Pascal nam omogoča, da se izognemo zapletanju s kazalci na nize, ki temeljijo na ničli, pri ravnanju z ničelno zaključenimi nizi z uporabo tipa PChar. Predstavljajte si PChar kot kazalec na niz z ničlo ali na matriko, ki ga predstavlja. Za več informacij o kazalcih preverite: Kazalci v Delphiju .

Na primer The GetDriveType Funkcija API določa, ali je diskovni pogon odstranljiv, fiksni, CD-ROM, RAM disk ali omrežni pogon. Naslednji postopek navaja vse pogone in njihove vrste v računalniku uporabnika. Postavite en gumb in eno komponento Memo na obrazec ter dodelite obravnavo OnClick za gumb:

|_+_|

Mešanje Delphijevih strun

Poljubno lahko mešamo vse štiri različne vrste nizov, Delphi bo najbolje razumel, kaj poskušamo narediti. Dodelitev s:=p, kjer je s nizovna spremenljivka in p izraz PChar, kopira ničelno končan niz v dolg niz.

Vrste znakov

Poleg štirih podatkovnih tipov nizov ima Delphi tri tipe znakov: Char , AnsiChar , in ​ WideChar . Konstanta niza dolžine 1, kot je 'T', lahko označuje vrednost znaka. Generični tip znaka je Char, kar je enakovredno AnsiCharju. Vrednosti WideChar so 16-bitni znaki, razvrščeni glede na nabor znakov Unicode. Prvih 256 znakov Unicode ustreza znakom ANSI.