【发布时间】:2019-03-25 20:07:38
【问题描述】:
我必须根据用户使用字典的输入来计算订单的价格,但我似乎无法正确计算。
- 鸡肉条 - 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();
嗯,输出应该是基于用户输入的正确金额。
【问题讨论】:
-
sum += items[order[i]-'0'];? -
真的这么简单吗?你能详细说明 -'0' 部分吗?我不明白。
-
double sum = order.Sum(ch => items[ch-'0']);-Select从输入order字符串返回每个 (ASCII) 字符,它们从值为 48-57 的字节运行(其中 48 是0)所以减去基值0以获取 1 - 9 之间的数字。请注意,这假定一个 ASCII/类似字符集,其中数字是连续的和升序的。您可以使用order.Where(ch => Char.IsDigit(ch))... 忽略坏字符。 -
感谢您的解释!
标签: c# .net linq dictionary console-application