ZGrid方格容器类的简单介绍

本文介绍了ZGrid,一个为了解决二维数组限制而设计的容器类。它使用Dictionary存储元素,支持动态扩展、节省空间、行列遍历及高级功能如表合并。ZGrid通过实现IEnumerable接口提供遍历支持,并详细解释了C#中接口实现、索引器和内部构造函数的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求

大家都遇到有这种需求吧,类似一个网格的结构体,一般都会使用二维数组来实现。类似以下的代码:

	int[][] array = new int[2][] { new int[] {0,11,12 }, new int[] {1,2,3,4,5 }};
	for (int i = 0; i < array.Length; i++) {
		foreach (int j in array[i]) {
			Debug.Log ("i  " + i + " j " + j);
		}
	}

这里二维数组在使用会带来一些不方便,或者说是问题:

1. 只能通过索引,进行某一行元素的遍历,不支持某以列的从上到下的遍历,同时遍历方向也是固定的,不能从反向进行遍历。

2. 内存会有一定多余,无法间隔定义元素,比如以上代码中,有两行,第一行三个数字,不能在0和11间插入几个“空”,只能使用0等进行占位,如果只是数字还好一些,如果元素是一个复杂的结构,就会多出很多无用的空间。特别是在设计一些稀疏表数据时,会消耗很大的内存资源。

3. 最致命的一点是,数组无法后期进行补充数据项,只能一开始就定义表的分布。当然如果使用单个List,索引的管理就会很繁琐。

4. 不支持一些高级功能,比如表合并、子表、持久化等功能。

设计

本文的目的是提供一个类似二维数组的操作的封装类,并解决以上问题。还是先上类图:


主要思路是使用Dictionary作为元素的基础存储结构,通过行、列组合成为索引值也就是字典的Key,元素作为Value进行保存,这样可以进行空间的有效利用,不会出现“空”块,访问速度也快。

主要类说明:

IZGrid定义表的基础行为,包括增/删/改/查等操作

IZGridIterator用于定义索引器,通过[i, j]和[i]的形式,进行所有元素和行的遍历,同时也支持Foreach进行遍历

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值