Delphi中的變體Variant陣列相關函式

2021-05-22 14:51:44 字數 1828 閱讀 5823

1.vararraycreate

procedure tform1.button1click(sender: tobject);

varv, w : variant;

i : integer;

begin

v := vararraycreate([1,4], varvariant);

v[1] := 1;

v[2] := '2';

v[3] := true;

v[4] := 4.5;

for i := vararraylowbound(v, 1) to vararrayhighbound(v, 1) do

begin

memo1.lines.add(v[i])

end;

w := vararraycreate([1,2, 1,3], varinteger);      //二維

end;

注:陣列上下線取值函式不能使用low/high,而是vararraylowbound/vararrayhighbound,其第二個引數為陣列維數。

2.vararrayof

更快捷的建立變體陣列的函式,例如:v := vararrayof([1, '2', true, 4.5]);

3.vararrayredim

調整變體陣列上下限

4.vararraydimcount

範圍變體陣列維數

5.vararraylowbound/vararrayhighbound

返回變體陣列上/下限

6.vararraylock/vararrayunlock

避免執行時刻檢查。一般用於初始化乙個大陣列。

例如:假設已經存在大陣列a,現試圖複製該陣列時使用如下**:

v := vararraycreate([1, 10000], varbyte);

for i := 1 to 10000 do

v[i] = a[i];

但是這段**的效能是有問題的,這樣會把大量的時間花費在對variant陣列的初始化上,因為在對每乙個元素進行賦值時,都要通過執行時邏輯來檢查並判斷資料型別的相容性、每個元素的位置等等。為了避免執行時檢查,要用vararraylock()函式和vararrayunlock()過程。ararraylock()函式在記憶體中鎖定陣列,使陣列不再移動和改變大小,並能返回乙個指向陣列資料的指標。而vararrayunlock()過程

用來對vararraylock()函式鎖定的陣列進行解鎖,使陣列能重新移動或改變大小。在鎖定陣列後,能用更有效的方法對陣列進行初始化,例如用指向陣列資料的指標呼叫move()過程,下面的**也對variant陣列進行初始化,但它更有效:

begin

v:=vararraycreate([1,10000],varbate);

p:=vararraylock(v)

trymove(a,p^,10000);

finally

vararrayunlock(v);

end;

end;

7.vararrayref

獲得variant指向的資料

8.varisarray

函式是乙個簡單的布林檢查函式,如果傳遞給它的引數是乙個variant陣列則返回true,否則返回false.

參考:http://www.newasp.net/tech/program/19757.html

Delphi筆記 整理 變體

除結構型別和指標外,變體型別能儲存其它的任何型別 變體型別能儲存介面,並能通過它使用介面的方法和屬性 參考object inte ces 變體型別能儲存動態陣列,也能儲存一種特殊的靜態陣列 變體陣列 variant array 變體型別能和其它變體型別 整數 實數 字串和布林值在表示式和賦值語句中混...

Tensorflow中佔位符與Variable物件

對於tensorflow中佔位符,可以把它看作乙個未知數,設矩陣a為矩陣b與矩陣c的乘積,1 b 123 4567 89 b begin 1 2 3 4 5 6 7 8 9 end tag b 1 47 2 58 3 69 1 那麼c矩陣只要滿足行數 3,列數不定就可以了,這時利用佔位符更容易表示,...

delphi中的指標

從最初的 pascal 發展至今 的object pascal 可以說在指標運用上,絲毫不會遜色於 c語言的指標。以下內容分為八個部分,分別是 一 型別指標的定義 二 無型別指標的定義 三 指標的解除引用 四 取位址 指標賦值 五 指標運算 六 動態記憶體分配 七 字元陣列的運算 八 函式指標 對於...