我必须根据用户使用Dictionary的输入来计算订单价格,但是我似乎无法正确理解它。
例如,如果输入为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();
根据用户的输入,输出应该是正确的美元金额。
答案 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,依此类推。