简体   繁体   中英

Create a random List from Dictionary in C# including one specific selected Item

I have a Dictionary that includes both key and value as strings. What I'm doing is I stored a word set with definition as Key as the word and definition as value. There are around 100 items in the dictionary. I'm creating a game in unity to select a word from the puzzle and player have to answer for a question that weather the definition is true or false. So now I select the value from whole dictionary which make the probability of getting true as the answer is 1%. I want to select 5 values from the dictionary including the correct answer and select randomly from that list or array.

This is how I initialized my dictionary.

public Dictionary<string, string> def = new Dictionary<string, string>(){
{"word1","definition1"},
{"word1","definition1"},
{"word1","definition1"}...
};

Can anyone help me out to solve this?

Thank you.

Lets say you have 100 items, you could do something like this:

//take six in case one duplicates 
var items = new  List<int>();
items.AddRange(Enumerable.Range(0, 99).OrderBy(i => rand.Next()).Take(6))

//now loop through your items and disregard if duplicated
var words =new List<string>();

foreach(var item in items)
{
     //i'll leave it to you to implement the check...
     words.Add(def.ElementAt(item).Key);
}

Assuming you have options in dictionary up to few thousand.

Dictionary<string, string> options = new Dictionary<string, string>();
options.Add("YourKey", def["YourKey"]);  // Correct Answer

Random r = new Random();
while (options.Count < 5)
{
    int randNum = r.Next(0, def.Count-1);

    if (!options.Keys.Contains(def.ElementAt(randNum).Key))
        options.Add(def.ElementAt(randNum).Key, def.ElementAt(randNum).Value);
}

List<string> OptionsList = options.Select(e=> e.Value).ToList();
// Shuffle OptionsList 

Finally, Shuffle your List using some best algorithms

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM