今天在遊戲中碰到乙個排序問題,就是有乙個裝備列表,是和伺服器完全一致的,各種協議需要用到裝備在這個列表中的序號。但是介面顯示的時候需要按照各種方式來排序,但是不能在原來的列表上排序。因此需要複製出乙個列表來,但是如何去複製這個列表,既能實現排序之後不會影響源列表,又要在排序之後,可以從原列表中找到裝備的序號。所以順便整理了下list的各種複製的區別。
源列表是list< t >
淺複製:
- list< t > oldlist = new list< t >();
- oldlist.add(..);
- list< t > newlist = oldlist;
深複製:
- list< t > oldlist = new list< t >();
- oldlist.add(..);
- list< t > newlist = new list< t >(oldlist);
t是引用或者是類的例項
注意用list newlist = oldlist;這種方法不是複製,而是新增了乙個引用;
淺複製:
1. - list< t > oldlist = new list< t >();
- oldlist.add(..);
- list< t > newlist = new list< t >(oldlist);
2. - list< t > oldlist = new list< t >();
- oldlist.add(..);
- list< t > newlist = oldlist.copyto();
3. -list< t > oldlist = new list< t >();
- oldlist.add(..);
- list< t > newlist = oldlist.copyto();
以上方法都可以實現類似的效果,並且複製出來的列表中的項,可以在源列表中用indexof之類的方法找到,所以這些也是遊戲中可以用的方法,當然還有tolist()這樣轉換成陣列的方法。除了這種複製之外,也可以用dictionary來儲存原來的鍵值,做乙個對應。
深複製:
1. - static class extensions
- - //當然前題是list中的物件要實現icloneable介面
- }2.也可以用序列化反序列化的方法實現深度複製,見之前的文章。
深度複製可以完全複製出乙個新的列表,用這種方法複製出來的列表裡的項,是不能在原列表中找到的。
C 中深複製和淺複製
c 支援兩種型別 值型別 和 引用型別 值型別 value type 如 char int 和 float 列舉型別和結構型別。引用型別 reference type 包括類 class 型別 介面型別 委託型別和陣列型別。如何來劃分它們?以它們在計算機記憶體中如何分配來劃分 值型別與引用型別的區別...
C 中的深複製和淺複製
c 支援兩種型別 值型別 和 引用型別 值型別 value type 如 char int 和 float 列舉型別和結構型別。引用型別 reference type 包括類 class 型別 介面型別 委託型別和陣列型別。如何來劃分它們?以它們在計算機記憶體中如何分配來劃分 值型別與引用型別的區別...
淺複製和深複製
在c 中,下面三種物件需要呼叫拷貝建構函式 有時也稱 複製建構函式 1 乙個物件作為函式引數,以值傳遞的方式傳入函式體 全域性函式,傳入的是物件 void g fun resume c 2 乙個物件作為函式返回值,以值傳遞的方式從函式返回 全域性函式 返回的是物件 resume g fun 3 乙個...