2012-01-06 3 views
0

키가 지정된 값인 사전 값에서 목록을 만들 수 있는지 궁금합니다.목록 만들기 <string> 사전에서 <string, string>

사전이를 좋아하는 것 :

Sidcup에 - DPC1 Sidcup에 - DPC2 블랙 히스 - DPC3 블랙 히스 - DPC4 벡 슬리 히스 - DPC5

사실, 나는 완전히 위의 같은 사전을 구현 아니에요을 좋은 생각입니다. 다음의 구현 :

DataSet ds = EngineBllUtility.GetDPCsForImportFile(connectionString, fileID); 
if (ds.Tables.Count > 0) 
{ 
    DataTable dtDPCs = EngineBllUtility.GetDPCsForImportFile(connectionString, fileID).Tables[0]; 
    Dictionary<string, string> preliminaryList = new Dictionary<string, string>(); 

    if (dtDPCs.Columns.Contains("DPCNumber") && dtDPCs.Columns.Contains("BranchName")) 
     foreach (DataRow dataRow in dtDPCs.Rows) 
     { 
      preliminaryList.Add(dataRow["BranchName"].ToString(), dataRow["DPCNumber"].ToString()); 
     } 

나는 다음과 같은 코드가 있습니다 (마지막 줄을 실례를 그 내가 할 노력하고있어의 아이디어가 단지 있도록).

foreach (string branch in branchNames) 
{ 
    string subfolder = System.IO.Path.Combine(saveLocation, branch); 
    System.IO.Directory.CreateDirectory(subfolder); 

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

    certificateList.Add(DPCNumber in preliminaryList where Key = branch); 
} 

위의 분기는 사전의 키입니다. 새 폴더를 만든 다음 생성중인 certificateList로 무언가를해야하기 때문에 반복해야합니다.

+1

사전에 키당 하나의 값만 있으므로 왜 그 목록에서 목록을 만들고 싶습니까? –

+0

루프의 모든 반복과 블록 내에서 'certificateList'를 초기화합니다. 루프 외부에서는 사용할 수 없습니다. 그게 니가 원하는거야? – Oded

+0

@Oded 질문의 끝까지 읽으면 – ediblecode

답변

0

확신 할 수 : 물론

private static void TestZip() 
    { 
     Dictionary<string, string> stringstringdic = new Dictionary<string, string>(); 
     stringstringdic.Add("1", "One"); 
     stringstringdic.Add("2", "Two"); 
     stringstringdic.Add("3", "Three"); 
     stringstringdic.Add("4", "Four"); 
     stringstringdic = stringstringdic.Where(pair => pair.Key != "1") 
             .ToDictionary(pair => pair.Key, pair => pair.Value); 
     List<string> stringlist = stringstringdic.Keys.Concat(stringstringdic.Values).ToList(); 
     foreach (string str in stringlist) 
     { 
      Console.WriteLine(str); 
     } 
    } 

//Output:  
//2 
//3 
//4 
//Two 
//Three 
//Four 

, 당신이 절은 실제 필요를 반영하기 위해 어디를 변경해야합니다.
당신을 이해했다면, 그것은 같습니다 .Where(pair => pair.Key == branch)

0

정확하게 이해하면 키를 기반으로하는 값을 별도의 목록에 추가 하시겠습니까? 정말 DPCNumber가 모두에 맞는 방법을 알고 preliminaryList의 선언을 볼 필요로

certificateList.Add(preliminaryList[branch]) 

이 단순화된다. 이 ...

certificateList.Add(preliminaryList[branch].ToString()) 
-1

단순히 키 목록을 만들려면 다음을 수행하십시오.

var dictionary = new Dictionary<string, string>(); 
dictionary.Add("key1", "value1"); 
dictionary.Add("key2", "value2"); 
dictionary.Add("key3", "value3"); 
dictionary.Add("key4", "value4"); 
dictionary.Add("key5", "value5"); 

var list = dictionary.Keys.ToList(); 

이렇게하면 값 "키 1", "키 2", "KEY3", "KEY4", "key5"와 목록을 제공해야한다.

where 절을 넣어 특정 키를 필터링 할 수 있습니다. 다음은 "2"(임의의 예)를 포함하는 모든 키를 제공하여 "key2"가됩니다.

var filteredList = dictionary.Keys.Where(key => key.Contains("2")).ToList(); 

편집 : 특정 키가 지정된 값을 가져 오려면.

string value = dictionary["key1"]; 

주, 키는 주어진 키 만 다시는하지 값 목록을 하나의 값을 얻을 수 있도록 사전은 고유해야합니다.

+0

'key'가 지정된 문자열 인 곳에'values'의 목록을 생성하고 싶습니다. – ediblecode

+0

[MSDN] (http://msdn.microsoft.com/en-us/library/xfhwa508.aspx)에 따르면 좋습니다. "Dictionary 의 모든 키는 사전의 동등 비교 자에 따라 고유해야합니다"따라서 주어진 키에 대해 하나의 값만 가져옵니다. 이 질문에 대한 변경 사항을 반영하여 답변을 업데이트하겠습니다. – Mark