Как лучше работать со словарем

У меня есть метод, на вход подается простой словарь (Dictionary cars), который содержит цвет и модель(key-color, values-model). мне нужно нарисовать таблицу в которой будет 2 столбца цвет и модель.

void Main()
{
    Dictionary<string, string> cars = new Dictionary<string, string>();
    cars.Add("green", "bmw");
    cars.Add("white", "ford");
    cars.Add("black", "audi");

    DrawTable(cars);
}
private IActionResult DrawTable(Dictionary<string, string> cars)
{
   var sb = new StringBuilder();
    sb.Append("<table><tbody><tr>");
    foreach (var model in cars.Values)
      {
         sb.Append(String.Format("<td>{0}</td><td>{1}</td>", **cars.Keys**, model);
      }
    sb.Append("</tr></tbody></table>");
    var table = sb.ToString();
    return Content(table);
}

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


Ответы (2 шт):

Автор решения: A K

У вас код содержит много синтаксических ошибок, похоже вы пишете в блокноте без проверки компилятором (Add с большой буквы, строки в кавычках и т.п.)

Также вам надо подтянуть понимание Dictionary, какие у него есть методы работы.

Код будет примерно такой:

void Main()
{
    Dictionary<string, string> cars = new Dictionary<string, string>();
    cars.Add("green", "bmw");
    cars.Add("white", "ford");
    cars.Add("black", "audi");

    DrawTable(cars, "green").Dump();
}

// Define other methods and classes here
public string DrawTable(Dictionary<string, string> cars, string selectedCarName)
{
    if(!cars.ContainsKey(selectedCarName))
        return string.Empty; // maybe null or throws

    var sb = new StringBuilder();
    sb.Append("<table><tbody><tr>");
    sb.Append(String.Format("<td>{0}</td><td>{1}</td>", selectedCarName, cars[selectedCarName]));

    sb.Append("</tr></tbody></table>");
    return sb.ToString();
}

введите сюда описание изображения

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

→ Ссылка
Автор решения: Сергей Татевосян

Если я верно понял то:

public string DrawTable(Dictionary<string, string> cars)
{
    var sb = new StringBuilder();
    sb.Append("<table><tbody><tr>");
    foreach (var color in cars.keys)
      {
         sb.Append(String.Format("<td>{0}</td><td>{1}</td>", color, cars[color]);
      }

    sb.Append("</tr></tbody></table>");
    return sb.ToString();
}

Правда соглашусь с предыдущими ораторами - думаю стоит создать отдельную модель или как вариант можно анонимный тип:

var cars = new { Brand = "BMW", Color = "green" };
→ Ссылка