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

166
10 апреля 2022, 20:40

У меня есть метод, на вход подается простой словарь (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);
}

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

Answer 1

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

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" };
Answer 2

У вас код содержит много синтаксических ошибок, похоже вы пишете в блокноте без проверки компилятором (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();
}

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

READ ALSO
Загрузка связанных данных EF

Загрузка связанных данных EF

Имеется таблица Tickets, у которой несколько связейЧтобы загрузить все необходимые связанные данные, получается такой запрос:

95
Нужно ввести значение переменной с клавиатуры в классе и в основном коде эту переменную добавить в List&lt;&gt;

Нужно ввести значение переменной с клавиатуры в классе и в основном коде эту переменную добавить в List<>

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

295
Не находится файл на локальном сервере

Не находится файл на локальном сервере

Всё происходит на Денвере Файл находящийся в папке css при css коде: 'background: url(/images/sprite

94
Задать глобальный стиль для popup/tooltip/title

Задать глобальный стиль для popup/tooltip/title

Есть простой <span title="заполните поле">*</span>

168