文档章节

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

涂孟超
 涂孟超
发布于 2014/09/26 15:34
字数 365
阅读 8
收藏 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;

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2010/04/12/1710070.html

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

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

SIHAIloveYAN
05/16
0
0
数组的简单方法

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

Matsonga
2016/03/03
29
0
Linux基础之bash脚本进阶篇-数组

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

紫色的茶碗
2016/09/10
0
0
Java集合-08之 再看 List

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

xidiancoder
2017/09/04
0
0
Vector、ArrayList、LinkedList 有什么区别?

版权声明:本文供交流学习,能够帮助到你是我最大的荣幸! https://blog.csdn.net/u014231523/article/details/82086185 这个问题主要是考察集合框架的问题,主要考察三者之间的设计区别,以...

兴国First
08/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

计算卷积神经网络浮点数运算量

前言 本文主要是介绍了,给定一个卷积神经网络的配置之后,如何大概估算它的浮点数运算量。 相关代码:CalFlops,基于MXNet框架的 Scala 接口实现的一个计算MXNet网络模型运算量的demo。 正文...

Ldpe2G
今天
1
0
Sql语言与MySql数据库

1. 数据库简介 1. 数据库,就是存储数据的仓库,只能通过sql语言来访问,数据库也是一个文件系统。通常,MySQL、Oracle等数据库,也被称为关系型数据库,其保存的不仅仅只是数据,还包括数据...

江左煤郎
今天
1
0
IDEA 取消自动import .*

打开设置 > Editor > Code Style > Java > Scheme Default > Imports ① 将 Class count to use import with "*" 改为 99 (导入同一个包的类超过这个数值自动变为 * ) ② 将 Names count ......

乔老哥
今天
3
0
PostGIS学习笔记(开篇)

PostGIS事实上算是笔者开始写博客的第一篇内容。而事实上那篇博文的内容并不丰富,笔者对PostGIS的了解仍然不多,然而17年在OSGeo课程学习时对PostGIS又有了进一步了解,并逐步发现它的强大。...

胖胖雕
今天
3
0
【Centos】在nginx服务器中配置php和mysql

接上一章《【Centos】利用Vultr服务器和namesilo布网》(https://my.oschina.net/u/3776619/blog/2051986),在Centos中配置好nginx,并在iptables中开启了80端口,和为了远程mysql操作方便开...

yongh701
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部