随笔 - 83,  文章 - 1,  评论 - 475,  阅读 - 41万

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

例如,数组相加

1
2
3
4
5
6
7
8
9
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;

 数组插入

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

 数组删除

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

数组连接

1
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, 功能是在一个数组里面查找另一个数组,并返回位置。

1
2
3
4
5
6
7
8
9
10
11
12
13
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 操作了。

 

其实也可以做成helper 更方便用。

复制代码
 TBytesHelper = record helper for Tbytes
  public
    procedure setlength(len:integer);
    function Find(const sub:TBytes): Integer;
    procedure add(const buff:TBytes);

  end;



procedure TBytesHelper.add(const buff: TBytes);
begin
    self:=self+buff;
end;

function   TBytesHelper.Find(const sub: TBytes): Integer;
var
  len: Integer;
begin
   len:= Length(sub);
  if len>0 then
    for Result := low(self) to high(self)-(len-1) do
      if CompareMem(@self[Result], sub, len) then
        exit;
  Result := -1;
end;

procedure   TBytesHelper.setlength(len: integer);
begin

    System.setlength(self,len);
end;
复制代码

 

posted on   xalion  阅读(2271)  评论(2编辑  收藏  举报
编辑推荐:
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· 程序员常用高效实用工具推荐,办公效率提升利器!
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)
< 2025年1月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8

点击右上角即可分享
微信分享提示