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將作為預設的父類。它位於所有類繼承結構...