2011-05-22 55 views
0

我在C#中有一個結構,並根據我在此處表示的代碼定義和數組列表。我在我的數組列表中添加項目,但我需要從列表中刪除幾行。你能幫助我,我如何從我的結構數組列表中刪除一個或多個項目:如何從C#中的結構數組中刪除一個項目#

public struct SwitchList 
    { 
     public int m_Value1, m_Value2; 
     public int mValue1 
     { 
      get { return m_Value1; } 
      set {m_Value1 = value; } 
     } 

     public int mValue2 
     { 
      get { return m_Value2; } 
      set {m_Value2 = value; } 
     }  
    } 

    //Define an array list of struct 
    SwitchList[] mSwitch = new SwitchList[10]; 

    mSwitch[0].mValue1=1; 
    mSwitch[0].mValue2=2; 

    mSwitch[1].mValue1=3; 
    mSwitch[1].mValue2=4; 

    mSwitch[2].mValue1=5; 
    mSwitch[2].mValue2=6; 

現在我該怎麼刪除我的項目之一,例如第1項 謝謝。

+0

你應該給仿製藥一出手 – Brad 2011-05-22 06:04:44

回答

5

數組是固定長度的數據結構。

您將需要創建一個新的數組,其大小比原始數組小一個,並將所有項目複製到該數組中,除了您想要刪除的項目,並開始使用新數組而不是原始數組。

爲什麼不使用List<T>代替?這是一個動態結構,可讓您添加和刪除項目。

0

這是不可能的,因爲數組是固定大小的元素塊。由於結構是值類型而不是引用類型,因此您也不能只設置元素zo null。一種選擇是創建一個新的小陣列並將剩餘的值複製到新陣列中。但更好的方法是在我看來使用List。

0

如果你真的,真的想用數組和左右移動的東西,在這裏是如何做到這一點的例子:

{ 
    // Remove first element from mSwitch using a for loop. 
    var newSwitch = new SwitchList[mSwitch.Length - 1]; 
    for (int i = 1; i < mSwitch.Length; i++) 
     newSwitch[i - 1] = mSwitch[i]; 
    mSwitch = newSwitch; 
} 
{ 
    // Remove first element from mSwitch using Array.Copy. 
    var newSwitch = new SwitchList[mSwitch.Length - 1]; 
    Array.Copy(mSwitch, 1, newSwitch, 0, mSwitch.Length - 1); 
    mSwitch = newSwitch; 
} 
1

你將需要移動元素並調整數組(是昂貴的),因爲有一些複雜性,你想要隱藏在只展示集合的類中,而不公開它的存儲實現細節。幸運的是,微軟已經提供了一個名爲List<T>的類,其中System.Collections.Generic名稱空間中的一些其他類型集合符合最常見的收集需求。

作爲一個側面說明,你應該使用自動屬性,而不是瑣碎的屬性風格,你哈