猿问

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

我必须根据用户使用字典的输入来计算订单价格,但我似乎做错了。

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

好吧,输出应该是基于用户输入的正确金额。


斯蒂芬大帝
浏览 202回答 4
4回答

偶然的你

不需要循环。var&nbsp;sum&nbsp;=&nbsp;order.Sum(c&nbsp;=>&nbsp;items[int.Parse(c.ToString())]);

慕娘9325324

此实现非常脆弱,它只允许 10 个项目并依赖于字符串解析,但我认为以下代码可以满足您的要求:order.Sum(character =>{&nbsp; &nbsp; int id = character - '0';&nbsp; &nbsp; return items.TryGetValue(id, out double price) ? price : 0d;});TryGetValue检查order仅包含作为项目字典中的键的数字。

白板的微信

尝试这个order.Select(c&nbsp;=>&nbsp;(c&nbsp;-&nbsp;'0')).Where(c&nbsp;=>&nbsp;c&nbsp;>&nbsp;0&nbsp;&&&nbsp;c&nbsp;<&nbsp;10).Sum(c&nbsp;=>&nbsp;items[c])

墨色风雨

您可以sum += items[order[i]-'0'];在 for 循环中使用。这是有效的,因为 '0' 与值 48 一起存储(请参阅此问题的答案)。其余的数字按顺序存储('1' 是 49,'2' 是 50,等等),所以 '1' - '0' == 1 等等。
随时随地看视频慕课网APP
我要回答