为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
斯蒂芬大帝 2022-11-13 14:30:01
我必须根据用户使用字典的输入来计算订单价格,但我似乎做错了。鸡肉条 - 3.50 美元炸薯条 - 2.50 美元汉堡包 - 4.00 美元热狗 - 3.50 美元大杯饮料 - 1.75 美元中杯饮料 - 1.50 美元奶昔 - 2.25 美元沙拉——3.75 美元小饮料 - 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 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

不需要循环。

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


查看完整回答
反对 回复 2022-11-13
?
慕娘9325324

TA贡献1783条经验 获得超5个赞

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


order.Sum(character =>

{

    int id = character - '0';


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

});

TryGetValue检查order仅包含作为项目字典中的键的数字。


查看完整回答
反对 回复 2022-11-13
?
白板的微信

TA贡献1883条经验 获得超3个赞

尝试这个

order.Select(c => (c - '0')).Where(c => c > 0 && c < 10).Sum(c => items[c])


查看完整回答
反对 回复 2022-11-13
?
墨色风雨

TA贡献1853条经验 获得超6个赞

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

这是有效的,因为 '0' 与值 48 一起存储(请参阅此问题的答案)。其余的数字按顺序存储('1' 是 49,'2' 是 50,等等),所以 '1' - '0' == 1 等等。


查看完整回答
反对 回复 2022-11-13
  • 4 回答
  • 0 关注
  • 201 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号