C#如何根据字典的键将字典的值添加到变量中?

时间:2019-03-25 20:07:39

标签: c# .net linq dictionary console-application

我必须根据用户使用Dictionary的输入来计算订单价格,但是我似乎无法正确理解它。

  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查询转换为两倍不起作用(我的查询也肯定是错误的)。 我真的不知道任何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 个答案:

答案 0 :(得分:4)

不需要循环。

var sum = order.Sum(c => items[int.Parse(c.ToString())]);

答案 1 :(得分:2)

此实现非常脆弱,它仅允许10个项目并且依赖于字符串分析,但是我认为以下代码可以满足您的要求:

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

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

TryGetValue检查order仅包含数字,这些数字是项目字典中的键。

答案 2 :(得分:2)

尝试

largest=TRUE

答案 3 :(得分:1)

您可以在循环中使用sum += items[order[i]-'0'];

之所以可行,是因为将'0'存储为值48(请参见this question的答案)。其余数字按顺序存储(“ 1”为49,“ 2”为50,依此类推),因此“ 1”-“ 0” == 1,依此类推。