2012-04-21 37 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