文档章节

如何删除动态数组的指定元素 - 回复 "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
jdk源码阅读笔记-ArrayList

一、ArrayList概述 首先我们来说一下ArrayList是什么?它解决了什么问题?ArrayList其实是一个数组,但是有区别于一般的数组,它是一个可以动态改变大小的动态数组。ArrayList的关键特性也是...

编程SHA
11/11
0
0
数组的简单方法

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

Matsonga
2016/03/03
29
0
Java集合-08之 再看 List

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

xidiancoder
2017/09/04
0
0
Linux基础之bash脚本进阶篇-数组

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

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

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 眼看着这个陨石砸了下来

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子:分享Nachtblut的单曲《Antik》 《Antik》- Nachtblut 手机党少年们想听歌,请使劲儿戳(这里) @mr_chip :上海的初雪之后有点冷 ...

小小编辑
11分钟前
4
1
Confluence 6 修改导航显示选项

选择 子页面(Child pages)来在边栏中查看当前页面的子页面。 选择 页面树(Page tree)来查看整个空间的页面树,扩展当前的页面。 你也可以选择是否完全隐藏导航显示选项或者添加你希望可见...

honeymose
43分钟前
0
0
Ubuntu18.04 安装MySQL

1.安装MySQL sudo apt-get install mysql-server 2.配置MySQL sudo mysql_secure_installation 3.设置MySQL非root用户 设置原因:配置过程为系统root权限,在构建MySQL连接时出现错误:ERROR...

AI_SKI
今天
3
0
3.6 rc脚本(start方法) 3.7 rc脚本(stop和status方法) 3.8 rc脚本(以daemon方式启动)

3.6-3.7 rc脚本(start、stop和status方法) #!/usr/bin/env python# -*- coding: utf-8 -*-# [@Version](https://my.oschina.net/u/931210) : python 2.7# [@Time](https://my.oschina.......

隐匿的蚂蚁
今天
3
0
Cnn学习相关博客

CNN卷积神经网络原理讲解+图片识别应用(附源码) 笨方法学习CNN图像识别系列 深度学习图像识别项目(中):Keras和卷积神经网络(CNN) 卷积神经网络模型部署到移动设备 使用CNN神经网络进行...

-九天-
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部