के लिए यादृच्छिक पुनरावृत्ति में मैं एक लूप बनाना चाहता हूं जो यादृच्छिक क्रम में 0-8 के माध्यम से लूप करता है। ध्यान दें कि प्रत्येक नंबर केवल एक बार देखी जा सकती है।लूप
मैं इसे कैसे प्राप्त कर सकता हूं?
के लिए यादृच्छिक पुनरावृत्ति में मैं एक लूप बनाना चाहता हूं जो यादृच्छिक क्रम में 0-8 के माध्यम से लूप करता है। ध्यान दें कि प्रत्येक नंबर केवल एक बार देखी जा सकती है।लूप
मैं इसे कैसे प्राप्त कर सकता हूं?
Random r = new Random();
foreach (int i in Enumerable.Range(0, 9).OrderBy(x => r.Next()))
{
Console.WriteLine(i);
}
जो मैं टाइप करने वाला था और यहां जो भी जुड़ा हुआ है उसके समान है http://stackoverflow.com/a/254861/659190 – Jodrell
बिल्कुल सही!ठीक वही जो मेरे द्वारा खोजा जा रहा था। मुझे लूप पर बहुत ध्यान केंद्रित हुआ, जबकि मुझे इस फ़ोरैच लूप का उपयोग करना चाहिए था। –
ग्रेट उत्तर। अगर यह मेरे जैसे अन्य नोबों की मदद करता है, तो IENumerable.OrderBy सिस्टम में एक विस्तार विधि है। लिंक नामस्थान। – geo
एक संभावना:
var numbers = Enumerable.Range(0, 9).ToList();
var rnd = new Random();
for (; numbers.Count != 0;)
{
var currentNumber = numbers[rnd.Next(0, numbers.Count)];
Console.WriteLine(currentNumber);
numbers.Remove(currentNumber); // remove current random number from list
}
Enumerable.Range(0, 9).ToList()
एक ली बनाता है संख्या 0 से 8. में लूप में हम सूची से यादृच्छिक संख्या चुनते हैं और लूप के अंत में सूची से इसे हटाते हैं, ताकि अगला चक्र इसे फिर से नहीं चुना जा सके।
इसे वेब खोज से मिला - फिशर-येट्स शफल, पर्ल में लागू किया गया।
इससे किसी भी इनपुट सरणी का निष्पक्ष यादृच्छिकरण उत्पन्न होगा।
sub fisher_yates_shuffle {
my $array = shift;
my $i;
for ($i = @$array; --$i;) {
my $j = int rand ($i+1);
next if $i == $j;
@$array[$i,$j] = @$array[$j,$i];
}
}
अधिक जानकारी के लिए:
http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle
और मूल मैंने पाया था से:
सी # –
के लिए बहुत अधिक '$' s 'सी #' –
के लिए बहुत अधिक 'perl' कोड के मुकाबले यह अधिक एल्गोरिदम है। सी # में रैंडम() फ़ंक्शन की निष्पक्ष प्रकृति के लिए बात नहीं कर सकता, जबकि फिशर-येट्स निश्चित रूप से है। – tbh
[यह तो सवाल] (http://stackoverflow.com/ प्रश्न/254844/यादृच्छिक-सरणी-उपयोग-linq-and-c-sharp) जो आप – Zbigniew
खोज रहे हैं, मैंने पूर्णांक 0-8 की सूची बनाने और लेने पर प्रयास किया है ई यादृच्छिक रूप से और बाद में इसे हटा रहा है। लेकिन मेरे कार्यक्रम में मैं एक पुनरावर्ती विधि का उपयोग कर रहा हूं जहां ऐसा समाधान व्यावहारिक नहीं है –
@ ब्रूनोकार्वालहल शायद आपको एक नमूना पोस्ट करना चाहिए कि आपने अपना रिकर्सन कैसे डिज़ाइन किया है क्योंकि यह आपके प्रश्न/उत्तर के लिए एक महत्वपूर्ण तत्व प्रतीत होता है। –