2013-10-03 110 views
0

我試圖創建並填充包含列表的字典,因爲它的值;即將列表添加到嵌套列表字典

Dictionary <string, List<string>> DictionaryA = new Dictionary<string,List<string>>(); 

字典中的值將被輸出到Excel電子表格中。

當我試圖在字典下輸入列表時出現問題。第一個Dictionary分配很好,例如Key「Key1」下的10個字符串的列表。

Dictionary <string, List<string>> DictionaryA = new Dictionary<string, List<string>>(); 
int i = 0; 
while(page.MoveNext()) //For example, for each page in a book 
{ 
    while(words.MoveNext()) //For example, words in the page 
    { 
    if(!(ListA.Contains(ValueA)) //For example, we are looking to store instances of each word in each page of a book 
    { 
     ListA.Add(ValueA); 
    } 
    DictionaryA.Add(i, ListA); 
    i++; 
    } 

    sortedList = DictionaryA.Keys.ToList(); //Let's say we want to sort the Dictionary as well 
    sortedList.Sort() 

    foreach (var key in sortedList) 
    { 
    DictionaryASorted.Add(key, DictionaryA[key]); 
    } 

    ExcelOuput(DictionaryASorted); //Function to export and save an Excel File 
} 

因此,通過page.Movenext()循環的第一次運行是好的,字典填充與列表正確。但是,在循環的第二次運行中,找到的任何唯一「ValueA」被添加到列表「ListA」中 - 這會修改已存儲在Dictionary中的「ListA」。最終結果是一個字典,其中包含不同的頁碼作爲關鍵字,以及每個關鍵字的相同巨大的單詞列表。

如果我在每個頁面循環的開始處使用ListA.Clear(),那麼列表最終將成爲它讀取的最後一頁的單詞,而不是其他任何內容。

如何使用此嵌套列表而不更改以前的列表被修改?我是否試圖以正確的方式做到這一點?還是有更好,更優雅的解決方案呢?

回答

0

您需要在循環中創建一個新列表。

所以,略高於while(words.MoveNext())

您需要:

List<string> ListA = new List<string>(); 

這將創建一個新的列表,你來填充。你必須認識到字典和ListA都指向同一個列表。添加或清除列表與字典引用的列表完全相同。您需要爲每個字典值創建一個新列表。

+0

這正是我所需要的,非常感謝!爲什麼之前我沒有看到?爾加! – Eomo

+0

@Eomo經典問題。不要感覺不好。當您將變量添加到另一個對象時,可能很難判斷變量是按值傳遞還是通過引用傳遞。 – Vulcronos