2012-04-21 109 views
0

这里是我的代码:从字典和随机项目列表中挑选随机列表并将其显示在textBlock中?

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与众不同,我正在开发Windows Phone 7。

+0

[从字典中随机输入]的可能重复(http://stackoverflow.com/questions/1028136/random-entry -from-dictionary) – 2012-04-21 07:18:32

回答

0

从这里: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)]; 
+0

这是完美的!非常感谢! – Lavi 2012-04-21 07:03:46

+0

'rand.Next(size)'会抛出OutOfRangeException。 – SimpleVar 2012-04-21 07:04:57

+0

谢谢,简单的修复。 – yamen 2012-04-21 07:13:44

2
var rand = new Random(); 

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

+1。注意:如果对Random类不熟悉,请阅读'Random'常见问题 - http://stackoverflow.com/questions/767999/random-number-generator-not-working-the-way-i-had-planned-c to避免“始终存在相同的随机值”问题。 – 2012-04-21 06:53:43

+0

总是让我想知道为什么随机不是一个静态类... – SimpleVar 2012-04-21 06:54:50

+0

也就是说,为了测试你有时候会想要相同的“随机”序列/数字。但是,是的,让默认行为不那么令人惊讶是很好的。 – 2012-04-21 06:59:01