如何在 if 语句中检查字典中的多个值?
How to check more than one value from dictionary in an if statement?
我刚开始学习 unity,在我的一本 c# 学习书中看到了这个任务。我必须在 foreach 中使用 if 语句创建一个代码,以便它检查我是否负担得起字典中的每个项目,但我不知道如何检查所有这些项目,甚至不知道如何检查特定的一次,所以我可以写 if 3 次例如。
目前我的日志显示了所有项目和它们的价值,但显示了我是否只负担得起第一个。我应该在 IF 括号中放入什么来检查每个值出现后的日志?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LearningCurve : MonoBehaviour
{
public int currentGold = 3;
void Start()
{
Dictionary<string, int> itemInventory = new Dictionary<string, int>()
{
{"Potions", 4 },
{"Daggers", 3 },
{"Lockpicks", 1 }
};
foreach (KeyValuePair<string, int> itemCost in itemInventory)
{
Debug.LogFormat("Item {0} - {1}g", itemCost.Key, itemCost.Value);
if (currentGold >= itemCost.Value)
{
Debug.Log("I can afford that!");
}
}
}
测试代码片段在控制台中提供了两个日志:“我负担得起!”。通过这个,我确定问题出在您的代码段实现中。我建议您检查是否在控制台中启用了折叠。
我附上了一张 Imgur link 以供参考。
Console Log
我不确定我是否理解了这个问题,但我会尽力向您简要介绍您发布的代码中发生的情况。
让我们从 if 开始,if 块的工作原理很简单,您在 C# 中放置一个布尔 bool 的简称,它可以有两个不同的值 true 和一个 false,在 if(BOOL VALUE) 中,如果值为 true,它将 运行 { CODE TO 运行 } 之间的代码。
让我们稍微重构一下代码,看看这里发生了什么。
Dictionary<string, int> itemInventory = new Dictionary<string, int>()
{
{"Potions", 4 },
{"Daggers", 3 },
{"Lockpicks", 1 }
};
foreach (KeyValuePair<string, int> itemCost in itemInventory)
{
Debug.LogFormat("Item {0} - {1}g", itemCost.Key, itemCost.Value);
bool iCanBuyitem = currentGold >= itemCost.Value;
Debug.LogFormat("{0} >= {1} is {2}", currentGold, itemCost.Value,iCanBuyitem);
if (iCanBuyitem)
{
Debug.LogFormat("I can buy {0} ", itemCost.Key);
}else
{
Debug.LogFormat("I can't buy {0} ", itemCost.Key);
}
}
与数学中的编程符号不同,>= 不是等式符号,而是一种称为二元运算符的东西,它在你的字典中接受 c# 中许多数字类型之一的两个变量,它们是整数 Dictionary 和生成一个 bool 值,告诉您一个数字是否大于或等于第二个数字,这是一种类似于以下签名的方法 public bool FirstIsBiggerOrEqualToSecond(int first, int second)
这是一个演示输出 https://dotnetfiddle.net/oWlYlY
的 dotnet fiddle
阅读问题 header 你的意思是,如果你想在 IF 中放置两个或多个条件,你必须使用 &&
operator:
if (currentGold >= itemCost.Value && currentGold <= 15)
{
Debug.Log("I have enough gold to buy this item and it's cheap.");
}
我刚开始学习 unity,在我的一本 c# 学习书中看到了这个任务。我必须在 foreach 中使用 if 语句创建一个代码,以便它检查我是否负担得起字典中的每个项目,但我不知道如何检查所有这些项目,甚至不知道如何检查特定的一次,所以我可以写 if 3 次例如。
目前我的日志显示了所有项目和它们的价值,但显示了我是否只负担得起第一个。我应该在 IF 括号中放入什么来检查每个值出现后的日志?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LearningCurve : MonoBehaviour
{
public int currentGold = 3;
void Start()
{
Dictionary<string, int> itemInventory = new Dictionary<string, int>()
{
{"Potions", 4 },
{"Daggers", 3 },
{"Lockpicks", 1 }
};
foreach (KeyValuePair<string, int> itemCost in itemInventory)
{
Debug.LogFormat("Item {0} - {1}g", itemCost.Key, itemCost.Value);
if (currentGold >= itemCost.Value)
{
Debug.Log("I can afford that!");
}
}
}
测试代码片段在控制台中提供了两个日志:“我负担得起!”。通过这个,我确定问题出在您的代码段实现中。我建议您检查是否在控制台中启用了折叠。
我附上了一张 Imgur link 以供参考。 Console Log
我不确定我是否理解了这个问题,但我会尽力向您简要介绍您发布的代码中发生的情况。 让我们从 if 开始,if 块的工作原理很简单,您在 C# 中放置一个布尔 bool 的简称,它可以有两个不同的值 true 和一个 false,在 if(BOOL VALUE) 中,如果值为 true,它将 运行 { CODE TO 运行 } 之间的代码。 让我们稍微重构一下代码,看看这里发生了什么。
Dictionary<string, int> itemInventory = new Dictionary<string, int>()
{
{"Potions", 4 },
{"Daggers", 3 },
{"Lockpicks", 1 }
};
foreach (KeyValuePair<string, int> itemCost in itemInventory)
{
Debug.LogFormat("Item {0} - {1}g", itemCost.Key, itemCost.Value);
bool iCanBuyitem = currentGold >= itemCost.Value;
Debug.LogFormat("{0} >= {1} is {2}", currentGold, itemCost.Value,iCanBuyitem);
if (iCanBuyitem)
{
Debug.LogFormat("I can buy {0} ", itemCost.Key);
}else
{
Debug.LogFormat("I can't buy {0} ", itemCost.Key);
}
}
与数学中的编程符号不同,>= 不是等式符号,而是一种称为二元运算符的东西,它在你的字典中接受 c# 中许多数字类型之一的两个变量,它们是整数 Dictionarypublic bool FirstIsBiggerOrEqualToSecond(int first, int second)
这是一个演示输出 https://dotnetfiddle.net/oWlYlY
阅读问题 header 你的意思是,如果你想在 IF 中放置两个或多个条件,你必须使用 &&
operator:
if (currentGold >= itemCost.Value && currentGold <= 15)
{
Debug.Log("I have enough gold to buy this item and it's cheap.");
}