C # Как мне добавить значение словаря в переменную на основе его ключа? - PullRequest
0 голосов
/ 25 марта 2019

Мне нужно рассчитать цену заказа, основываясь на входных данных пользователя, используя словарь, но я не могу понять, что это правильно.

  1. куриные полоски - $ 3,50
  2. Картофель фри - $ 2,50
  3. Гамбургер - 4,00 $
  4. Хот-дог - $ 3,50
  5. Большой напиток - $ 1,75
  6. Средний напиток - $ 1,50
  7. Молочный коктейль - $ 2,25
  8. салат - 3,75
  9. Малый напиток - $ 1,25

Например, если введено значение 236, цена заказа должна быть $ 8.

Преобразование моего LINQ-запроса в double не сработало (мой запрос также определенно неверен). Я действительно не знаю LINQ, но поскольку вы не можете использовать цикл for для словаря, поскольку они не проиндексированы, у меня нет другого выбора.

        Dictionary<int, double> items = new Dictionary<int, double>()
        {
            { 1, 3.50 },
            { 2, 2.50 },
            { 3, 4.00 },
            { 4, 3.50 },
            { 5, 1.75 },
            { 6, 1.50 },
            { 7, 2.25 },
            { 8, 3.75 },
            { 9, 1.25 }
        };

        string order = Console.ReadLine();
        double sum = 0;
        for (int i = 0; i < order.Length; i++)
        {
            sum += Convert.ToDouble(items.Where(x => x.Key == int.Parse(order[i].ToString())).Select(x => x.Value));
        }
        Console.WriteLine(sum);
        Console.ReadKey();

Что ж, на выходе должна быть правильная сумма в долларах на основе ввода от пользователя.

Ответы [ 4 ]

4 голосов
/ 25 марта 2019

Нет необходимости в петле.

var sum = order.Sum(c => items[int.Parse(c.ToString())]);
2 голосов
/ 25 марта 2019

Попробуйте это

order.Select(c => (c - '0')).Where(c => c > 0 && c < 10).Sum(c => items[c])
2 голосов
/ 25 марта 2019

Эта реализация довольно хрупкая, она допускает только 10 элементов и основана на разборе строк, но я думаю, что следующий код выполняет то, что вы просите:

order.Sum(character =>
{
    int id = character - '0';

    return items.TryGetValue(id, out double price) ? price : 0d;
});

TryGetValue проверяет, что order содержит только цифры, которые являются ключами в словаре предметов.

1 голос
/ 25 марта 2019

Вы можете использовать sum += items[order[i]-'0']; в цикле for.

Это работает, потому что '0' хранится со значением 48 (см. Ответы на этот вопрос ).Остальные цифры хранятся в порядке («1» - 49, «2» - 50 и т. Д.), Поэтому «1» - «0» == 1 и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...