文档章节

让自己的列表类支持遍历

涂孟超
 涂孟超
发布于 2014/09/26 15:35
字数 439
阅读 4
收藏 0
点赞 0
评论 0

一个普通的数字列表类(TNumList), 还没有支持遍历:

unit NumList;

interface

uses SysUtils;

type
  TNumList = class
  private
    FCount: Integer;
    FNumArray: array of Double;
    function GetNum(aIndex: Integer): Double;
    procedure SetNum(aIndex: Integer; aNum: Double);
  public
    constructor Create(aCount: Integer);
    property Count: Integer read FCount;
    property Nums[Index: Integer]: Double read GetNum write SetNum; default;
  end;

implementation

{ TNumList }

constructor TNumList.Create(aCount: Integer);
begin
  inherited Create;
  FCount := aCount;
  SetLength(FNumArray, FCount);
end;

function TNumList.GetNum(aIndex: Integer): Double;
begin
  if (aIndex < 0) or (aIndex >= FCount) then raise Exception.Create('索引越界');
  Result := FNumArray[aIndex];
end;

procedure TNumList.SetNum(aIndex: Integer; aNum: Double);
begin
  if aIndex >= FCount then
  begin
    FCount := aIndex + 1;
    SetLength(FNumArray, FCount);
  end;
  FNumArray[aIndex] := aNum;
end;

end. //end

//调用测试:
uses NumList;

procedure TForm1.Button1Click(Sender: TObject);
var
  nList: TNumList;
  i: Integer;
begin
  nList := TNumList.Create(5);
  for i := 0 to nList.Count - 1 do //赋值
  begin
    nList[i] := Random(1000) / 100;
  end;

  Memo1.Clear;
  for i := 0 to nList.Count - 1 do //取值
  begin
    Memo1.Lines.Add(FloatToStr(nList[i]));
  end;
  nList.Free;
end;


支持遍历的 TNumList 类:

unit NumList;

interface

uses SysUtils;

type
  TNumList = class;

  TNumEnumerator = class
  private
    FIndex: Integer;
    FNumList: TNumList;
  public
    constructor Create(aNumList: TNumList);
    function GetCurrent: Double;
    function MoveNext: Boolean;
    property Current: Double read GetCurrent;
  end;

  TNumList = class
  private
    FCount: Integer;
    FNumArray: array of Double;
    function GetNum(aIndex: Integer): Double;
    procedure SetNum(aIndex: Integer; aNum: Double);
  public
    constructor Create(aCount: Integer);
    function GetEnumerator: TNumEnumerator; //!
    property Count: Integer read FCount;
    property Nums[Index: Integer]: Double read GetNum write SetNum; default;
  end;

implementation

{ TNumList }

constructor TNumList.Create(aCount: Integer);
begin
  inherited Create;
  FCount := aCount;
  SetLength(FNumArray, FCount);
end;

function TNumList.GetEnumerator: TNumEnumerator;
begin
  Result := TNumEnumerator.Create(Self);
end;

function TNumList.GetNum(aIndex: Integer): Double;
begin
  if (aIndex < 0) or (aIndex >= FCount) then raise Exception.Create('索引越界'');
  Result := FNumArray[aIndex];
end;

procedure TNumList.SetNum(aIndex: Integer; aNum: Double);
begin
  if aIndex >= FCount then
  begin
    FCount := aIndex + 1;
    SetLength(FNumArray, FCount);
  end;
  FNumArray[aIndex] := aNum;
end;

{ TNumEnumerator }

constructor TNumEnumerator.Create(aNumList: TNumList);
begin
  inherited Create;
  FIndex := -1;
  FNumList := aNumList;
end;

function TNumEnumerator.GetCurrent: Double;
begin
  Result := FNumList[FIndex];
end;

function TNumEnumerator.MoveNext: Boolean;
begin
  Result := FIndex < FNumList.Count - 1;
  if Result then Inc(FIndex);
end;

end. //end

//调用测试
uses NumList;

procedure TForm1.Button1Click(Sender: TObject);
var
  nList: TNumList;
  i: Integer;
  num: Double;
begin
  nList := TNumList.Create(5);
  for i := 0 to nList.Count - 1 do //赋值
  begin
    nList[i] := Random(1000) / 100;
  end;

  Memo1.Clear;

  for num in nList do //遍历
  begin
    Memo1.Lines.Add(FloatToStr(num));
  end;

  nList.Free;
end;

本文转载自:http://www.cnblogs.com/del/archive/2011/05/09/2041064.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
Java 常用工具类 Collections 源码分析

文章出处 文章出自:安卓进阶学习指南 作者:shixinzhang 完稿日期:2017.10.25 和 是 JDK 为我们提供的常用工具类,方便我们操作集合和数组。 这次之所以总结这个,是因为在一次面试中被问到...

u011240877
2017/10/26
0
0
40个Java集合面试问题和答案

1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector、Stack、HashTable和Array。随着集合的广泛使 用,Java1.2提出了囊括所有集...

赵小宾
2015/05/12
0
0
Java集合框架面试题

1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector、Stack、HashTable和Array。随着集合的广泛使用,Java1.2提出了囊括所有集...

火力全開
2016/10/09
19
0
40个Java集合面试问题和答案

Java集合框架为Java编程语言的基础,也是Java面试中很重要的一个知识点。这里,我列出了一些关于Java集合的重要问题和答案。 1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都...

天蚕宝衣
2016/03/31
39
0
40个JAVA问题

1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector、Stack、HashTable和Array。随着集合的广泛使用,Java1.2提出了囊括所有集...

裸奔的八戒
2016/02/17
170
0
ArrayList工作原理

1.前言 List接口中,重要的两个实现是ArrayList和LinkedList,其中ArrayList又比LinkedList常用。这是因为ArrayList的读取性能远远高于LinkedList。本篇博文将介绍ArrayList,稍后介绍Linke...

kukudeku
2016/08/26
137
0
Java集合类和HashMap遍历

JAVA 集合类介绍和使用 类关系示意图 Iterable(接口) │ └--Collection (接口) ├-List(接口) │ ├-LinkedList 不同步 (构造同步:List list = Collections.synchronizedList(new Li...

商者
2016/03/28
10
0
Map、Set、List集合差别及联系详解

         一、集合   集合类存放于java.util包中。   集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference)。  ...

Romane
06/05
0
0
HeadFirst设计模式(十) - 迭代器模式

良好的管理集合 有许多种方法可以把对象堆起来成为一个集合。你可以把它们放进数据、堆栈、列表或者是散列表中,每一种都有它自己的优点和适合的使用时机。 举个例子 加入现在有两个餐厅,披...

杰克鹏仔
2016/08/07
41
0
小菜学设计模式——设计模式总结之行为型(1)

1、设计模式总结 设计模式总共23个,但是常用的不到10个,下面就把这23个设计模式进行整理归类,具体如下: 1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型...

learn_more
2015/07/09
182
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

idea tomcat 远程调试

tomcat 配置 编辑文件${tomcat_home}/bin/catalina.sh,在文件开头添加如下代码。    CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7829" Idea端配......

qwfys
今天
1
0
遍历目录下的文件每250M打包一个文件

#!/usr/bin/env python # -*- utf-8 -*- # @Time : 2018/7/20 0020 下午 10:16 # @Author : 陈元 # @Email : abcmeabc@163.com # @file : tarFile.py import os import tarfile import thr......

寻爱的小草
今天
1
0
expect同步文件&expect指定host和要同步的文件&构建文件分发系统&批量远程执行命令

20.31 expect脚本同步文件 expect通过与rsync结合,可以在一台机器上把文件自动同步到多台机器上 编写脚本 [root@linux-5 ~]# cd /usr/local/sbin[root@linux-5 sbin]# vim 4.expect#!/...

影夜Linux
今天
1
0
SpringBoot | 第九章:Mybatis-plus的集成和使用

前言 本章节开始介绍数据访问方面的相关知识点。对于后端开发者而言,和数据库打交道是每天都在进行的,所以一个好用的ORM框架是很有必要的。目前,绝大部分公司都选择MyBatis框架作为底层数...

oKong
今天
12
0
win10 上安装解压版mysql

1.效果 2. 下载MySQL 压缩版 下载地址: https://downloads.mysql.com/archives/community/ 3. 配置 3.1 将下载的文件解压到合适的位置 我最终将myql文件 放在:D:\develop\mysql 最终放的位...

Lucky_Me
今天
2
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

问题终结者
今天
1
0
expect脚本同步文件expect脚本指定host和要同步的文件 构建文件分发系统批量远程执行命令

expect脚本同步文件 在一台机器上把文件同步到多台机器上 自动同步文件 vim 4.expect [root@yong-01 sbin]# vim 4.expect#!/usr/bin/expectset passwd "20655739"spawn rsync -av ro...

lyy549745
今天
1
0
36.rsync下 日志 screen

10.32/10.33 rsync通过服务同步 10.34 linux系统日志 10.35 screen工具 10.32/10.33 rsync通过服务同步: rsync还可以通过服务的方式同步。那需要开启一个服务,他的架构是cs架构,客户端服务...

王鑫linux
今天
1
0
matplotlib 保存图片时的参数

简单绘图 import matplotlib.pyplot as pltplt.plot(range(10)) 保存为csv格式,放大后依然很清晰 plt.savefig('t1.svg') 普通保存放大后会有点模糊文件大小20多k plt.savefig('t5.p...

阿豪boy
今天
3
0
java 8 复合Lambda 表达式

comparator 比较器复合 //排序Comparator.comparing(Apple::getWeight);List<Apple> list = Stream.of(new Apple(1, "a"), new Apple(2, "b"), new Apple(3, "c")) .collect(......

Canaan_
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部