delphi XE7 数组操作中缺少的find(POS)功能

简介: delphi xe7 中对数组操作做了很多扩充,比如加入了类似字符串处理的功能。 例如,数组相加 var A: array of integer; B: TBytes = [1,2,3,4]; //Initialization can be done from declaration begin .

delphi xe7 中对数组操作做了很多扩充,比如加入了类似字符串处理的功能。

例如,数组相加

var
  A: array of integer;
  B: TBytes = [1,2,3,4]; //Initialization can be done from declaration
begin
  ...
  A:=[1,2,3]; // assignation using constant array
  A:=A+[4,5]; // addition - A will become [1,2,3,4,5]
  ...
end;

 数组插入

var
  A: array of integer;
begin
  ...
  A:=[1,2,3,4];
  Insert(5,A,2); // A will become [1,2,5,3,4]
  ...
end;

 数组删除

var
  A: array of integer;
begin
  ...
  A:=[1,2,3,4];
  Delete(A,1,2); //A will become [1,4]
  ...
end;

数组连接

 A := Concat([1,2,3],[4,5,6]); //A will become [1,2,3,4,5,6]

为什么在xe7 中要对数组做这么大的变化呢,当然首先肯定是方便数组编程,其实更深层的原因是因为ansistring 在移动平台上的缺失,

很多过去的代码,由于都是把byte 当作ansichar 处理的,到了移动平台上,这些代码都跑不起来了。而且很难改造。

那么只有使用Tbytes 里替换传统的ansistring. 因此对数组操作增加了这么多方法来解决这个传统问题。

那现在问题来了,传统的pos  功能却没加入,导致大量的是使用pos 的操作无法改造。

不知道会在xe? 里面加入?现在临时的办法就是自己做一个find(pos)函数来解决这个问题。

为了不与以后的pos 冲突,函数名就叫find, 功能是在一个数组里面查找另一个数组,并返回位置。

function Find(const sub, Buffer:TBytes): Integer;
var
  N: Integer;
begin


  N := Length(sub);
  if N>0 then
    for Result := low(Buffer) to high(Buffer)-(N-1) do
      if CompareMem(@Buffer[Result], sub, N) then
        exit;
  Result := -1;
end;

 这样就可以用这个替换原来的ansistring 的pos 操作了。

 

目录
相关文章
|
6月前
|
C++
[c++][记录]编译libusb-win32过程
[c++][记录]编译libusb-win32过程
|
4月前
|
索引 Python
Python 列表查找元素位置的高级函数代码程序设计
Python中,要查找list列表中元素的位置,即元素在列表中的索引位置,可以使用list列表类型内置的方法index(),但这个并不能直接使用,因为要考虑到查找的元素可能并不存在于list列表之中,而使用index()方法查找列表中并不存在的元素,Python将抛出ValueError,程序也可能因此终止,为了避免这种情况
40 3
|
11月前
|
存储 编解码 编译器
GNU C 扩展语法:零初始化数组
零长度数组、变长度数组都是 GNU C 编译器支持的数组类型。今天我们来回顾一下零长度数组。
109 0
VB编程:DataPart函数判断当前所处季节-46
VB编程:DataPart函数判断当前所处季节-46
123 0
VB编程:取整函数Int、CInt、Fix区别-30
VB编程:取整函数Int、CInt、Fix区别-30
148 0
VB编程:DataPart函数判断当前所处季节
VB编程:DataPart函数判断当前所处季节
270 0
VB编程:DataPart函数判断当前所处季节
VB编程:取整函数Int、CInt、Fix区别
VB编程:取整函数Int、CInt、Fix区别
585 0
VB编程:Val字符串转数字,CStr数字转字符串
VB编程:Val字符串转数字,CStr数字转字符串
152 0