2013-04-27 57 views
2

我有一個有幾個List<T>對象的類。這些列表是「關聯的」,因此每個列表中的第一個項目是相關的,第二個項目是這樣的(類似於單個記錄中的字段)。我想一起循環訪問列表,以便根據「記錄」同時更改一些數據。在類中循環關聯的列表?

隨着foreach循環,我可以通過一個列表循環,而無需通過i或其他一些跟蹤記錄。但是,我不知道如何同時訪問其他列表中的相關項目。我是否需要使用像i這樣的變量來計算它,還是有更好的方法?我對泛型和基於類的編程還很新。我完全錯過了一個更好的方式來安排這些數據?

回答

1

使用標準for循環和索引(您的i),這將允許您訪問每個數組中的相同元素。沒有更好的方法來做到這一點。

+0

我不同意...您的方法是一種方法,但它是脆弱的,如果還有人曾經返回排序或分頁列表那麼這種方法就會崩潰......最糟糕的是它你不明白......你不知道你的數據是錯誤的關聯,直到你開始暴露不良數據... – Rikon 2013-04-27 04:40:34

+1

我也不認爲這總是最好的方式去。 OP必須同時切分列表的事實在建模中是一種氣味。 – aquaraga 2013-04-27 04:50:28

+0

@Rikon,aquaraga我同意這不是嘗試保持三個列表同步的最佳模式。但是,考慮到問題中提供的設置,三個列表,那麼基本的循環是同時遍歷它們的方式。 – denver 2013-04-27 05:05:39

1

我能想到的最簡單的方法是使用標準的for-loop。當索引很重要時,我總是喜歡for-loops而不是foreach。

for(int i = 0; i < list1.Count(); i++) 
{ 
     list1[i].someMethod(); 
     list2[i].someMethod(); 
     ... 
} 

我假設所有列表的長度相同時,如你所說。

您可能希望查看將相關項目分組在一個類中,然後只有一個列表,而不是多個。

1

如何收集的所有數據的「行」在這個類的一個類和地點實例在一個單一的列表,而不是你想保持同步多個列表

2

因此,這是怎麼樣的有趣的問題...請注意,我懷疑一些不同的數據建模可能已經能夠解決這個問題,但是如果您將相關的項目一起存儲在一個Tuple中,您可以遠離同步列表......看起來很危險的是要有這些同步列表,並依靠他們應該都對應於「我」,因爲任何排序,分組或分頁(Skip/Take)都可能打破這種範例。

如果將它們存儲在List<Tuple<ItemTypeFromList1, ItemTypeFromList2, ... ItemTypeFromListN>>,那麼你可以在一個單一的列表保持物品放在一起,這樣你可以做一個迭代在列表上,然後僅僅作用於元組適當地

+0

我同意。如果OP在他的模型中有類似的東西,那麼更好的辦法是創建一個域對象而不是元組。 – aquaraga 2013-04-27 04:47:43

+0

從來沒有聽說過域對象,但聽說過元組(儘管從來沒有使用它們)。看起來他們似乎說,他們是一成不變的一旦創建。這是否意味着如果我創建一個'List '並分配一組值,它們被鎖定?因爲這對我不起作用,因爲我以後需要更改數據。在那種情況下,這會更好地工作,因爲「列表」呢? – techturtle 2013-04-27 05:13:41

+1

@techturtle你不能重新分配元組屬性。所以在這種情況下,課堂會更好。 – MAV 2013-04-27 05:30:06

0

嘗試N個項目使用下面的代碼

foreach (var i in firstList) 
     { 
      var s1 = secondList[firstList.LastIndexOf(i)]; 
      var s2 = thirdList[firstList.LastIndexOf(i)]; 
     } 

希望這是你想要的答案.. :)