Составление списка <string>из словаря <строка, строка> - PullRequest
0 голосов
/ 06 января 2012

Мне было интересно, можно ли составить список из значений словаря, где ключом является указанное значение?

Словарь должен выглядеть следующим образом:

Sidcup - DPC1 Sidcup - DPC2 Blackheath - DPC3 Blackheath - DPC4 Bexleyheath - 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);
}

В приведенном выше ответвлении находится ключ от словаря.Мне нужно выполнить итерацию, потому что нужно создать новую папку, а затем сделать что-то с сертификатом, который я создаю.

Ответы [ 3 ]

0 голосов
/ 06 января 2012

Sure:

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, чтобы отразить ваши реальные потребности.
Если я вас правильно понял, это как .Where(pair => pair.Key == branch)

0 голосов
/ 06 января 2012

Чтобы просто создать список ключей, вы можете сделать следующее.

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();

Это должно дать вам список со значениями «key1», «key2», «key3», «key4», «key5».

Вы можете вставить предложение where, чтобы отфильтровать определенные ключи. Следующее дает все ключи, которые содержат «2» (случайный пример), в результате просто «key2».

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

Edit: Чтобы получить значение с заданным ключом.

string value = dictionary["key1"];

Обратите внимание, что ключ словаря должен быть уникальным, поэтому для данного ключа вы когда-либо получите только одно значение назад, а не список значений.

0 голосов
/ 06 января 2012

Если я правильно вас понимаю, вы хотите добавить значение на основе ключа в отдельный список?

certificateList.Add(preliminaryList[branch])

Это упрощено, так как мне действительно нужно увидеть объявление предварительного списка, чтобы узнать, как DPCNumber вписывается во все это.Может ли это быть ...

certificateList.Add(preliminaryList[branch].ToString())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...