這很常見 - 特別是當你試圖讓你的代碼變得更多的數據驅動 - 需要迭代關聯的集合。例如,我剛寫完一段代碼,看起來像這樣:用於迭代相關聯的值集合的模式是什麼?
string[] entTypes = {"DOC", "CON", "BAL"};
string[] dateFields = {"DocDate", "ConUserDate", "BalDate"};
Debug.Assert(entTypes.Length == dateFields.Length);
for (int i=0; i<entTypes.Length; i++)
{
string entType = entTypes[i];
string dateField = dateFields[i];
// do stuff with the associated entType and dateField
}
在Python中,我會寫這樣的:
items = [("DOC", "DocDate"), ("CON", "ConUserDate"), ("BAL", "BalDate")]
for (entType, dateField) in items:
# do stuff with the associated entType and dateField
我不需要申報並行陣列,我不需要斷言我的數組長度相同,我不需要使用索引來獲取項目。
我覺得有使用LINQ在C#這樣做的方式,但我想不出它可能是什麼。是否有一些簡單的迭代方法可以跨多個關聯的集合?
編輯:
這是一個好一點,我覺得 - 至少,在情況下我必須在報關手動荏苒收藏的奢侈品,並在所有集合包含相同的對象類型:
List<string[]> items = new List<string[]>
{
new [] {"DOC", "DocDate"},
new [] {"CON", "ConUserDate"},
new [] {"SCH", "SchDate"}
};
foreach (string[] item in items)
{
Debug.Assert(item.Length == 2);
string entType = item[0];
string dateField = item[1];
// do stuff with the associated entType and dateField
}
一個爲什麼需要「更多的壓縮,但不易閱讀」的方式來寫東西,而不是定義的結構還是一個類? – Hamid 2009-03-15 21:58:28
如果您有30或40對值,則必須編寫相同的成員名稱30次或40次,這不會使代碼*更具可讀性。 – 2009-03-16 02:17:07