【问题标题】:How to get random value from Dictionary<string, bool>如何从 Dictionary<string, bool> 获取随机值
【发布时间】:2022-12-18 13:12:21
【问题描述】:
我正在尝试从我的字典 Dictionary<string, bool> 中获取一个随机游戏名称。
由于某种原因,我尝试的任何方法似乎都不起作用。
我可以用简单的列表形式做到这一点,我实际上有这个,但我想做的是在第一个场景中,我希望玩家选择他们想玩的游戏(一个游戏或多个游戏或所有游戏)。我将这些游戏名称作为统一场景中的按钮,而我想要做的是一旦他们单击这些按钮并点击播放,只有那些游戏应该运行。
This is the screenshot of my main scene
Dictionary<string, bool> nameOfTheGame = new Dictionary<string, bool>();
nameOfTheGame.Add("Never Have I Ever", false);
nameOfTheGame.Add("Randomiser", false);
nameOfTheGame.Add("Dare", false);
nameOfTheGame.Add("Vote & Win", false);
nameOfTheGame.Add("Who Is Most Likely To ?", false);
nameOfTheGame.Add("Where's the water ?", false);
nameOfTheGame.Add("Would You Rather Choose ?", false);
nameOfTheGame.Add("Flip Or Strip", false);
nameOfTheGame.Add("Two Truths And One Lie", false);
string gameName = //(here)
【问题讨论】:
标签:
c#
unity3d
game-development
【解决方案1】:
您可以使用ElementAt使用以下代码
出于测试目的,我在您的字典中将一些值更改为 true。
Dictionary<string, bool> nameOfTheGame = new Dictionary<string, bool>();
nameOfTheGame.Add("Never Have I Ever", true);
nameOfTheGame.Add("Randomiser", false);
nameOfTheGame.Add("Dare", true);
nameOfTheGame.Add("Vote & Win", false);
nameOfTheGame.Add("Who Is Most Likely To ?", true);
nameOfTheGame.Add("Where's the water ?", false);
nameOfTheGame.Add("Would You Rather Choose ?", true);
nameOfTheGame.Add("Flip Or Strip", false);
nameOfTheGame.Add("Two Truths And One Lie", true);
Random rand = new Random();
int index1 = rand.Next(0, nameOfTheGame.Count);
var item = nameOfTheGame.ElementAt(index1).Value;
int index2 = rand.Next(0, nameOfTheGame.Count);
var item2 = nameOfTheGame.ElementAt(rand.Next(0, nameOfTheGame.Count)).Value;
【解决方案2】:
Dictionary<string, bool> nameOfTheGame = new Dictionary<string, bool>();
nameOfTheGame.Add("Never Have I Ever", false);
nameOfTheGame.Add("Randomiser", false);
nameOfTheGame.Add("Dare", false);
nameOfTheGame.Add("Vote & Win", false);
nameOfTheGame.Add("Who Is Most Likely To ?", false);
nameOfTheGame.Add("Where's the water ?", false);
nameOfTheGame.Add("Would You Rather Choose ?", false);
nameOfTheGame.Add("Flip Or Strip", false);
nameOfTheGame.Add("Two Truths And One Lie", false);
//I guess the value is a flag of player choosed, If not you can remove follow line
var choosedNames = nameOfTheGame.Where(p => p.Value).Select(p => p.Key).ToArray();
Random rand = new Random();
int index = rand.Next(0, choosedNames.Length);
string gameName = nameOfTheGame.Keys.ToArray()[index];