文档章节

如何删除动态数组的指定元素 - 回复 "Splendour" 的部分问题

涂孟超
 涂孟超
发布于 2014/09/26 15:34
字数 365
阅读 8
收藏 0
点赞 0
评论 0

type
  TArr = array of TPoint; {把数组先定义成一个类型会方便许多, 这里仅用 TPoint 测试}

{删除动态数组指定元素的过程: 参数 arr 是数组名, 参数 Index 是要删除的索引}
procedure DeleteArrItem(var arr: TArr; Index: Integer);
var
  Count: Cardinal;
begin
  Count := Length(arr);
  if (Count = 0) or (Index < 0) or (Index >= Count) then Exit;
  Move(arr[Index+1], arr[Index], (Count-Index)* SizeOf(arr[0]));
  SetLength(arr, Count - 1);
end;

{测试}
procedure TForm1.Button1Click(Sender: TObject);
var
  arr: TArr;
  i: Integer;
begin
  {测试数据}
  SetLength(arr, 5);
  arr[0].X := 1; arr[0].Y := 111;
  arr[1].X := 2; arr[1].Y := 222;
  arr[2].X := 3; arr[2].Y := 333;
  arr[3].X := 4; arr[3].Y := 444;
  arr[4].X := 5; arr[4].Y := 555;

  {删除第四个元素, 并查看删除后的结果}
  DeleteArrItem(arr, 3);
  for i := 0 to Length(arr) - 1 do
    Memo1.Lines.Add(Format('%d, %d', [arr[i].X, arr[i].Y]));
end;

 
 
 
 
 

 

 

  

有时使用动态数组的指针更方便, 简单修改即可:

type
  TArr = array of TPoint;
  PArr = ^TArr;

{过程}
procedure DeleteArrItem(p: PArr; Index: Integer);
var
  Count: Cardinal;
begin
  Count := Length(p^);
  if (Count = 0) or (Index < 0) or (Index >= Count) then Exit;
  Move(p^[Index+1], p^[Index], (Count-Index)* SizeOf(p^[0]));
  SetLength(p^, Count - 1);
end;

{测试}
procedure TForm1.Button1Click(Sender: TObject);
var
  arr: TArr;
  i: Integer;
begin
  SetLength(arr, 5);
  arr[0].X := 1; arr[0].Y := 111;
  arr[1].X := 2; arr[1].Y := 222;
  arr[2].X := 3; arr[2].Y := 333;
  arr[3].X := 4; arr[3].Y := 444;
  arr[4].X := 5; arr[4].Y := 555;

  DeleteArrItem(@arr, 3);
  for i := 0 to Length(arr) - 1 do
    Memo1.Lines.Add(Format('%d, %d', [arr[i].X, arr[i].Y]));
end;

 
 
 
 
 

 

 

  

© 著作权归作者所有

共有 人打赏支持
涂孟超
粉丝 12
博文 2004
码字总数 14107
作品 0
深圳
程序员
Java 集合Vector源码深入解析

概论 学完ArrayList和LinkedList之后,我们接着学习Vector。学习方式还是和之前一样,先对Vector有个整体认识,然后再学习它的源码;最后再通过实例来学会使用它。 第1部分 Vector介绍 Vect...

SIHAIloveYAN ⋅ 05/16 ⋅ 0

ArrayList的使用

问题的提出 给出了两个时间点(例如,20060321,20080402),要求计算出中间的所有日期,并显示出来。在调用的时候需要拿一个容器将这些日期存放起来。但是,由于时间点是随机给出,不能确定数...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

数组的简单方法

注:在Object C中使用NSArray 来创建数组;但是在Object C中NSArray 只能存放对象类型的指针,不能存放int,char,double等基本数据类型。   一. 不可变数组对象     这个和之前的NSStr...

Matsonga ⋅ 2016/03/03 ⋅ 0

Linux基础之bash脚本进阶篇-数组

数组 什么是数组? 计算机中的数组指的是具有相同类型的若干变量按照一定的顺序组织起来的一种数据类型。 通俗点来说数组就是变量的一种,按现在的术语来说就是变量圈子中的一个,只不过这个...

紫色的茶碗 ⋅ 2016/09/10 ⋅ 0

php中级程序员面试题

PHP 基础知识部分 1. 求$a的值 $a = "hello"; $b = &$a; unset($b); $b = "world"; echo $a; $a = 'hellow', 2. 求$b的值 $a = 1; $x = &$a; $b = $a++; echo $b; $b = 1; 3. 写出一个函数实......

雷xiao雨 ⋅ 2014/03/11 ⋅ 0

Java集合-08之 再看 List

0.概要 之前已经了解了的全部内容(ArrayList, LinkedList, Vector, Stack)。 接下来再看 第1部分 List概括 先回顾一下List的框架图 List 是一个接口,它继承于Collection的接口。它代表着有序...

xidiancoder ⋅ 2017/09/04 ⋅ 0

Python入门(六) list

Python中的list,跟c++中的vertor有些类似,支持随机访问,可以动态增加或者删除数据,但是list要比vector更加灵活,可以存放任意类型的元素,包括嵌套list。 1. list的创建: 使用[]表示,元...

kaedehao ⋅ 2015/08/12 ⋅ 0

数据结构与算法-C语言篇7-链式存储结构之静态链表

数据结构与算法-目录 前言    C语言具有指针能力,使得它可以非常容易地操作内存中的地址和数据,这比其他高级语言更加方便灵活。 后来的面向对象语言,如Java、C#等,虽不使用指针,但因为...

香沙小熊 ⋅ 01/09 ⋅ 0

java list用法

JAVA List用法 1.List中可以添加任何对象,包括自己定义的类。 //定义一个Person类 class Person{ …… } Person person1 = new Person(); Person person2 = new Person(); List list = new ......

求是科技 ⋅ 2015/04/15 ⋅ 0

(转) 坚持完成这套学习手册,你就可以去 Google 面试了

C++ —— 不使用内建的数据类型。C++ —— 使用内建的数据类型,如使用 STL 的 std::list 来作为链表。Python —— 使用内建的数据类型(为了持续练习 Python),并编写一些测试去保证自己代...

wangxiaocvpr ⋅ 2016/10/12 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

内核线程、轻量级进程、用户线程

线程与进程概念 在现代操作系统中,进程支持多线程。 进程是资源管理的最小单元; 线程是程序执行的最小单元。 即线程作为调度和分配的基本单位,进程作为资源分配的基本单位 一个进程的组成...

117 ⋅ 21分钟前 ⋅ 0

elasticsearch2.4.6升级为elasticsearch-5.5.0的经历

将elasticsearch-5.5.0 中的配置 path.data 指向原来的数据路径 即 path.data: /usr/local/src/elasticsearch-2.4.6/data 注意: elasticsearch-5.5.0 需要将jdk版本升级到1.8...

晨猫 ⋅ 21分钟前 ⋅ 1

lvm讲解 磁盘故障小案例

1

oschina130111 ⋅ 26分钟前 ⋅ 0

那些提升开发人员工作效率的在线工具

本文转载自公众号 Hollis 作为一个Java开发人员,经常要和各种各样的工具打交道,除了我们常用的IDE工具以外,其实还有很多工具是我们在日常开发及学习过程中要经常使用到的。 Hollis偏爱使用...

时刻在奔跑 ⋅ 38分钟前 ⋅ 0

restful风格 实现DELETE PUT请求 的web.xml的配置

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframe......

泉天下 ⋅ 43分钟前 ⋅ 0

Shell数组

Shell数组 Shell在编程方面比Windows批处理强大很多,无论是在循环、运算。 bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数...

蜗牛奔跑 ⋅ 53分钟前 ⋅ 0

nmap为了开发方便 可以做简单的修改

因为nmap扫描是默认使用的是nse脚本,但是在开发的过程中需要修改后缀(主要是因为后缀为lua才能显示高亮,所以这里用一个取巧的办法) nse_main.lua文件中我们找到如下代码 local t, path = cn...

超级大黑猫 ⋅ 57分钟前 ⋅ 0

springmvc获取axios数据为null情况

场景:前端用了vue没有用ajax与后台通信,用了axios,但是在代码运行过程中发现axios传递到后台的值接受到数据为null。 问题原因:此处的问题在与axios返回给后台的数据为json类型的,后台接...

王子城 ⋅ 59分钟前 ⋅ 0

hadoop技术入门学习之发行版选择

经常会看到这样的问题:零基础学习hadoop难不难?有的人回答说:零基础学习hadoop,没有想象的那么难,也没有想象的那么容易。看到这样的答案不免觉得有些尴尬,这个问题算是白问了,因为这个...

左手的倒影 ⋅ 59分钟前 ⋅ 0

806. Number of Lines To Write String - LeetCode

Question 806. Number of Lines To Write String Solution 思路:注意一点,如果a长度为4,当前行已经用了98个单元,要另起一行。 Java实现: public int[] numberOfLines(int[] widths, Str...

yysue ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部