zoukankan      html  css  js  c++  java
  • Delphi中的变体Variant数组相关函数

    转自:Delphi中的变体Variant数组相关函数

    1.VarArrayCreate

    procedure TForm1.Button1Click(Sender: TObject); 
    var 
      V, 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) 
      try 
        move(A,P^,10000); 
      finally 
        VarArrayUnlock(v); 
      end; 
    end;

    7.VarArrayRef

    获得variant指向的数据

    8.VarIsArray

    函数是一个简单的布尔检查函数,如果传递给它的参数是一个Variant数组则返回True,否则返回False.


    1.VarArrayCreate()和VarArrayOf()这两个常用就不说了 
    2.VarArrayRedim()函数能修改variant数组的最高限。 
    3.VarArrayDimCount()函数返回Variant数组的维数, 
    4.VarArrayLowBound()和VarArrayHighBound()函数分别返回Variant数组的下边界和上边界。 
    5.VarArrayLock()和VarArrayUnlock()一般用于初始化一个大数组。 
    如: 
    它创建一个有10000字节的Variant数组。假定有另一个相同长度的非Variant类型的数组,并且想 
    把非variant类型的数组复制到variant类型的数组中去。通常这都是通过用循环语句对variant数组 
    的单元进行赋值实现的。示例如下: 
    begin 
    v:=VarArrayCreate([1,10000],varBate); 
    fori:=1to10000do 
    v[i]:=a[i]; 
    end; 
    上面这段代码的主要问题在于,大量的时间花费在对Variant数组的初始化上,因为在对每一个元 
    素进行赋值时,都要通过运行时逻辑来检查并判断数据类型的兼容性、每个元素的位置等等。为了避 
    免运行时检查,要用VarArrayLock()函数和VarArrayUnlock()过程。VarArrayLock()函数在内存中锁 
    定数组,使数组不再移动和改变大小,并能返回一个指向数组数据的指针。而VarArrayUnlock()过程 
    用来对VarArrayLock()函数锁定的数组进行解锁,使数组能重新移动或改变大小。在锁定数组后,能 
    用更有效的方法对数组进行初始化,例如用指向数组数据的指针调用Move()过程,下面的代码也对 
    Variant数组进行初始化,但它更有效: 
    begin 
    v:=VarArrayCreate([1,10000],varBate); 
    p:=VarArrayLock(v) 
    try 
    move(A,P^,10000); 
    finally 
    VarArrayUnlock(v); 
    end; 
    end; 
    6.VarArrayRef()获得variant指向的数据 
    7.VarIsArray()函数是一个简单的布尔检查函数,如果传递给它的参数是一个Variant数组则返回True,否则返回False. 
    8.VarClear()过程清除Variant变量并将VType域的值设为varEmpty. 
    9.VarCopy()将Source复制到Dest。 
    10.VarCast()将一个Variant转换成指定的类型并存储在另一个Variant变量中。 
    11.VarType()返回指定Variant的varXXX类型代码。 
    12.VarAsType()跟VarCast()的功能一样。 
    13.VarIsEmpty()如果一个Variant变量的类型代码是varEmpty则返回True。 
    14.VarIsNull()判断Variant变量是否包含null值。 
    15.VarToStr()将一个Variant变量转换成字符串表达式(如果Variant为varEmpty或varNUll则为空字符 
    串)。 
    16.VarFromDateTime()返回一个Variant变量,它存放着指定的TDateTime类型的值。 
    17.VarToDateTime()返回在Variant中的TDateTime类型的值。

  • 相关阅读:
    在博客园里给图片加水印(canvas + drag)
    Chrome开发者工具使用指南
    《古剑奇谭3》千秋戏辅助工具(前端React制作)
    React中useEffect的源码解读
    关于为什么使用React新特性Hook的一些实践与浅见
    使用@babel/preset-typescript取代awesome-typescript-loader和ts-loader
    使用dva改造React旧项目的数据流方案
    在React旧项目中安装并使用TypeScript的实践
    安利一个绘制指引线的JS库leader-line
    微信小程序中悬浮窗功能的实现(主要探讨和解决在原生组件上的拖动)
  • 原文地址:https://www.cnblogs.com/sdlz/p/10733621.html
Copyright © 2011-2022 走看看