我有一個像這樣的對象的現有應用程序。什麼是代表多個集合的數據結構?
class MyObject{
public MyCollection TypeOnes;
public MyCollection TypeTwos;
public MyCollection TypeThrees;
public MyCollection All;
}
class MyCollection : Collection{
public boolean IsLoaded;
}
它是這樣加載的。
//using bool array for flag simplicity in example
public void Load(ref MyObject obj, bool[] flags){
if(flags[0]){
obj.TypeOnes = LoadOnes();
obj.TypeOnes.IsLoaded = true;
}else{
obj.TypeOnes = new MyCollection();
}
if(flags[1]){
obj.TypeTwos = LoadTwos();
obj.TypeTwos.IsLoaded = true;
}else{
obj.TypeTwos= new MyCollection();
}
if(flags[2]){
obj.TypeThrees = LoadThrees();
obj.TypeThrees.IsLoaded = true;
} else {
obj.TypeThrees = new MyCollection();
}
if(flags[3]){
obj.All = obj.TypeOnes.Clone().AddRange(obj.TypeTwos.Clone()).AddRange(obj.TypeThrees.Clone());
obj.All.IsLoaded = true;
} else {
obj.All = new MyCollection();
}
}
你可以清楚地看到All
集合應該代表所有類型的將是不同步的,除非所有類型都在一次裝入All
集合。
我要做的是製作一個單一標誌來加載所有的類型集合,但是,我想保留All
集合用於一次訪問所有的類型集合並使它們同步爲了限制重構的數量,我將不得不這樣做。我希望它是可讀/寫的,所以如果我對TypeOnes
集合進行了更改,它將反映在All
集合中,反之亦然。
是否有一個現有的DataType可以用於此?
如果不是我想要構建什麼樣的數據結構?
除非有特殊原因需要刪除重複項,否則'Concat'可以降低速度和內存佔用量。 – Servy 2013-03-05 17:39:58
@Servy:好點。我在過去幾天一直在廣泛使用'HashSet',並且在他們的腦海中跳舞:-)更新。 –
2013-03-05 17:40:54
+1使用Union而不是'Concat'的好處:如果對象在某個集合中被複制,而Union會產生正確的結果。 – 2013-03-05 17:41:06