2013-10-03 2 views
0

값 목록을 포함하는 사전을 만들고 채우려 고합니다. 즉중첩 목록 사전에 목록 추가

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

사전의 값은 Excel 스프레드 시트로 출력됩니다.

키 아래에서 사전에 목록을 입력하려고 할 때 문제가 발생합니다. 첫 번째 사전 할당은 괜찮습니다. 예를 들어 키 "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"에 추가됩니다. 이는 사전에 이미 저장된 "ListA"를 수정합니다. 최종 결과는 키와 다른 페이지 번호가 들어있는 사전과 각 키에 대해 동일한 거대한 단어 목록입니다.

각 페이지 루프의 시작 부분에 ListA.Clear()을 사용하면 목록은 읽은 마지막 페이지의 단어가되고 다른 것은 없습니다.

수정중인 이전 목록을 변경하지 않고이 중첩 목록을 어떻게 사용할 수 있습니까? 이 일을 올바르게하려고 노력하고 있습니까? 아니면 이보다 더 훌륭하고 우아한 솔루션이 있습니까?

답변

0

루프에서 새 목록을 만들어야합니다.

그래서, 단지 while(words.MoveNext())

이상 당신이 필요합니다

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

이 당신이 채울 위해 새 목록을 만들 것입니다. 사전과 ListA가 모두 같은 목록을 가리키고 있다는 것을 알아야합니다. 목록을 추가하거나 지우는 것은 사전이 이해하는 목록과 동일합니다. 각 사전 값에 대한 새 목록을 만들어야합니다.

+0

정확히 내가 필요한 것입니다. 왜 전에 보지 못했지?! 가! – Eomo

+0

@Eomo Classic 문제. 기분 나빠하지 마. 변수를 값으로 전달하거나 다른 객체에 추가 할 때 참조에 의해 전달되는 것을 알기가 어려울 수 있습니다. – Vulcronos