2011-04-08 173 views
0

的比較兩個詞典名單A和列表B是類型產品類型產品

List A = new List(); 
List B = new List(); 

爲了簡單起見,我已經在每個List中提到的產品。這裏的數字是指產品ID。

列表A中包含1,2,3,4,5

列表B中含有1,2,3,4,5,6,7

我想知道在C#中的ASP代碼。網絡將比較這兩個列表,並對它們進行同步。意思是如果列表B有一些更多的產品(可以說19,20)它複製19,20列表A.

我將如何比較數量屬性。我必須檢查兩個列表中是否有相同的產品ID。如果List B中的一個與List A不同,那麼它將檢查qty屬性。它會同步它們兩個。 (名單B名單A)

其次,如果我刪除B中的產品,(比如3),應該也從列表中刪除A.

無論我在名單B做的(是爲新的會話),它必須與列表A同步。 這包括添加新產品,刪除和更新特定產品的數量。

+4

聽起來像設計問題開始 – Peter 2011-04-08 11:38:50

+4

...然後像一個措辭良好的「請發送代碼」的問題。你嘗試了什麼? – 2011-04-08 11:40:01

+0

爲了您的信息我已經花了3個小時試圖讓它工作..... – user478636 2011-04-08 11:45:06

回答

2

如果列表B總是要贏,爲什麼你會打擾同步?

ListA.Clear(); 
ListA.AddRange(ListB.Items); 
0

總結:

  • 排序兩個列表。
  • 聲明兩個索引
  • 循環,而索引均低於它們各自的列表的長度
  • 使用比較器來告訴我們,如果在當前索引中的項目是相同的。
  • ,基於比較器的結果
  • 增量的索引酌情根據以往的行動

您可能將不得不花說一點時間調整的從目的地列表中添加或刪除的項目構建邏輯代碼才能正常工作,但這是一般過程。

另一種方法是清除第二個列表並添加第一個列表中的所有項目。

「最好」的方法高度依賴於你在做什麼和爲什麼。

+0

這是我的觀點:99%的最佳方法是不維護2列表開始。 – Peter 2011-04-08 11:53:03

+0

@peter我曾經使用這種類型的結構涉及到一個Web應用程序的數據緩存方案。列表A是緩存的一部分,列表B是需要反映在緩存中的更新。基本上,我是在增量更新緩存中的數據之後。在這一點上,我假設OP正在嘗試類似的東西。 – Rozwel 2011-04-08 12:04:08

0

您可以嘗試使您的ListAListB作爲ObservableCollectionProduct。然後在CollectionChanged事件處理程序中編寫代碼。