ZGrid方格容器類的簡單介紹

2021-08-20 16:57:11 字數 2771 閱讀 9923

int array = new int[2] , new int };

for (int i = 0; i < array.length; i++)

}

這裡二維陣列在使用會帶來一些不方便,或者說是問題:

1. 只能通過索引,進行某一行元素的遍歷,不支援某以列的從上到下的遍歷,同時遍歷方向也是固定的,不能從反向進行遍歷。

2. 記憶體會有一定多餘,無法間隔定義元素,比如以上**中,有兩行,第一行三個數字,不能在0和11間插入幾個「空」,只能使用0等進行佔位,如果只是數字還好一些,如果元素是乙個複雜的結構,就會多出很多無用的空間。特別是在設計一些稀疏表資料時,會消耗很大的記憶體資源。

3. 最致命的一點是,陣列無法後期進行補充資料項,只能一開始就定義表的分布。當然如果使用單個list,索引的管理就會很繁瑣。

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

主要思路是使用dictionary作為元素的基礎儲存結構,通過行、列組合成為索引值也就是字典的key,元素作為value進行儲存,這樣可以進行空間的有效利用,不會出現「空」塊,訪問速度也快。

主要類說明:

izgrid定義表的基礎行為,包括增/刪/改/查等操作

izgriditerator用於定義索引器,通過[i, j]和[i]的形式,進行所有元素和行的遍歷,同時也支援foreach進行遍歷

izrowiterator用定義行或者列元素的遍歷,同樣支援foreach

izgridindexable用於定義支援可以獲取到i, j(行、列)的元素模板類,自定義的元素類可以從其繼承就可以訪問元素所在的行、列屬性了。

共通技術點說明:

1. ienumerable介面的使用以上前三個介面是都是從有ienumerable繼承,以獲取遍歷功能的支援,關ienumerable的使用方法,其中unity有其特別的地方,可以參考以下文章

有關ienumerable的其它c#語法的說明

ienumerable還有乙個帶模板的定義ienumerable,一般應該是同時實現這兩個介面,這樣可以保證可以使用ienumerable介面進行統一的訪問。比如,c#自帶的list類就是同時實現了以上兩個介面。當然這樣的實現**上會比較的繁瑣。

2. 介面的顯式實現與隱式實現,通俗的來講,「顯示介面實現」就是使用介面名稱作為方法名的字首;而傳統的實現方式稱之為:「隱式介面實現」。主要的區別是

隱式介面實現,類和介面都可訪問介面中方法。顯式介面實現,只能通過介面訪問。我的使用經驗是

隱式實現可以用來隱藏掉一些方法,又保證介面層的正常使用。本例中

統一原則:支援template引數的方法或者屬性才使用public公有的顯式實現,否則使用隱式實現。有關基礎知識的介紹參考如下:

3.有關索引器的實現

索引器跟屬性很像,只不過他有乙個this關鍵字緊跟著是[int index],來實現類似陣列訪問的封裝。

4. internal關鍵字的使用

這裡主要是使用它對一些迭代器的建構函式進行修飾,以保證其不會被在庫外面構造使用。

有關索引器的使用:

zgridgrid = new zgrid(10, 10);

//資料索引器的使用

//賦值操作

for (int i = 0; i < 10; i++)

} debug.log ("grid size is " + grid.width);

//遍歷所有的資料項

foreach (var i in grid.datas)

//行、列索引器的使用

foreach (var i in grid.rows)

}

子表的使用

//獲取子網格

var subgrid = grid.subgrid(5, 5, 3, 3);

foreach (var i in subgrid)

支援c# ling操作

//ling操作

var items = subgrid.datas.where (a => a > 60).tolist ();

foreach (var i in items)

inderable的支援

zgriddatagrid = new zgrid(3, 3);

datagrid[2, 2] = new testdata ();

datagrid[2, 2].data = 10;

debug.log ("datagrid[2, 2] col = " + datagrid [2, 2].col);

可以獲取到元素所對應的行、列資訊,元素類的定義如下:

public class testdata : zgridindexable
**庫與demo**位置 :

未完成功能:

目前列的遍歷未實現完。

後續可以通過editor在unity裡進行視覺化的配置表結構。

持久化功能未現實完。

其它說明:

typeof(animal).isassignfrom(typeof(dog))  他返回true的條件是 dog類直接或間接的實現了animal類;繼承也可以

typeof(dog).issubclassof(typeof(animal))  他返回true的條件是dog類是animal的子類

Spring IoC容器的簡單介紹

ioc 是 inversion of control 的縮寫,就是控制反轉的意思,他是指在開發過程中,物件的建立不再由呼叫者處理,而是交給 spring 容器來建立。spring 容器會控制程式之間的關係,而是不通過 直接控制,所以控制權有程式 轉移給了 spring容器,控制權發生反轉。簡單來說就...

Qt容器類介紹

qt提供了一些順序容器 qlist,qlinkedlist,qvector,qstack和qqueue。因為這些容器中的資料都是乙個接乙個線性儲存的,所以稱為順序容器。對於大多數應用程式而言,使用最多而且最好的時qlist,儘管它是乙個陣列列表,但是可以快速在其頭部和尾部進行新增操作。如果需要使用乙...

Python class類的簡單介紹

1.類與例項 類與例項互相關聯,類是例項的物件,而例項是真正的實物,他存放了類中所定義的物件的具體資訊 建立乙個類 class mynewobject object class suite object是所有類之母,如果你的類沒有繼承任何其他的父類,object將作為預設的父類。它位於所有類繼承結構...