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;
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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)