【问题标题】:Pick random list out of dictionary and random item out of list and display it in a textBlock?从字典中选择随机列表并从列表中选择随机项目并将其显示在文本块中?
【发布时间】:2012-04-21 06:45:24
【问题描述】:

这是我的代码:

var dict = new Dictionary<string, List<string>>
                       {
                            {"AR", new List<string> {"M4A1", "M16A4", "SCAR-L", "CM901", "TYPE 95", "G36C","ACR 6", "MK14", "AK-47", "FAD"} },
                            {"SM", new List<string> {"MP5","UMP45","PP90M1","P90","PM-9","MP7"}},
                            {"LM", new List<string>{"L86 LSW","MG36", "PKP PECHENEG","MK46","M60E4"}},
                            {"SR", new List<string>{"BARRET .50 CAL","L118A","DRAGUNOV","AS50","RSASS","MSR"}},
                            {"SG", new List<string>{"USA512","KS612","SPAS-12","AA-12","STRIKER","MODEL 1887"}},
                            {"RS", new List<string>{"RIOT SHIELD"}}


                       };

我想在文本框中的这个字典输出中的随机列表中有一个随机项目。谢谢,任何帮助表示赞赏!另外,我正在为 Windows Phone 7 开发,如果它有任何不同的话。

【问题讨论】:

标签: c# windows-phone-7


【解决方案1】:
var rand = new Random();

var randList = dict.Values[rand.Next(dict.Count - 1)];
var randomWord = randList[rand.Next(randList.Count - 1)];

【讨论】:

  • +1。注意:如果不熟悉 Random 类,请阅读 Random FAQ at - stackoverflow.com/questions/767999/… 以避免“始终相同的随机值”问题。
  • 即为了进行测试,您有时会想要相同的“随机”序列/编号。但是,是的,让默认行为不那么令人惊讶会很好。
  • 我想说,让静态随机,实例保持原样。
【解决方案2】:

从这里:Random entry from dictionary

有一种更有效的方法可以将字典随机化一次并使其可供选择:

public IEnumerable<TValue> RandomValues<TKey, TValue>(IDictionary<TKey, TValue> dict)
{
    Random rand = new Random();
    List<TValue> values = Enumerable.ToList(dict.Values);
    int size = dict.Count - 1;
    while(true)
    {
        yield return values[rand.Next(size)];
    }
}

然后:

var rand = new Random();
var randomDict = RandomValues(dict);
var randList = randomDict.First();
var randVal = randList[rand.Next(randList.Count - 1)];

【讨论】:

  • 这太完美了!非常感谢!
  • rand.Next(size) 将抛出 OutOfRangeException。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
  • 2012-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多