दिलचस्प पोस्ट
एसक्यूएल दो तालिका में शामिल हो Scanf () समस्या से पहले C / C ++ printf () क्या यह संभव है कि ओपनएलएल में किस क्यूब की सतह पर क्लिक किया जाए? किसी तत्व का चयन करें जब क्लास का नाम एक निश्चित शब्द से शुरू होता है इनपुट को टेक्स्टबॉक्स पर सीमित करना: केवल संख्याएं और दशमलव बिंदु को अनुमति दें JSON प्रारूप में पोस्ट डेटा सी + + एबीआई मुद्दों की सूची NETWORK_ERROR: XMLHttpRequest अपवाद 101 MySQL में एईएस_एनसीआरसीपीटी और एईएस_डेसीआरपीपीटी का उपयोग कैसे करें सी ++: क्लास डेटा सदस्य को पॉइंटर ":: *" समूह की प्रत्येक समूह में पहली पंक्ति का चयन करें? एएसपी.नेट एमवीसी में अपलोड की गई फाइल को कैसे मान्य करें? एक डबल से एक्स महत्वपूर्ण आंकड़े गोल करें पायथन json.loads मान दिखाता है त्रुटि: अतिरिक्त डेटा एक ++ और उपसर्ग ++ ए के लिए दो अलग-अलग तरीकों में ऑपरेटर ++ को अधिभार कैसे करें?

सूची में यादृच्छिक वस्तु का उपयोग करें

मेरे पास एक ArrayList है, और मुझे एक बटन क्लिक करने में सक्षम होना चाहिए और फिर बेतरतीब ढंग से उस सूची से एक स्ट्रिंग चुनना होगा और उसे संदेशबॉक्स में प्रदर्शित करना होगा।

मैं ऐसा कैसे कर पाऊंगा?

वेब के समाधान से एकत्रित समाधान "सूची में यादृच्छिक वस्तु का उपयोग करें"

  1. कहीं Random कक्षा का एक उदाहरण बनाएं ध्यान दें कि हर बार जब आपको यादृच्छिक संख्या की आवश्यकता हो उत्पन्न संख्याओं में एकरूपता प्राप्त करने के लिए आपको पुराने उदाहरण का पुन: उपयोग करना चाहिए। आपके पास कहीं एक static फ़ील्ड हो सकता है (थ्रेड सुरक्षा समस्याओं के बारे में सावधान रहें):

     static Random rnd = new Random(); 
  2. ArrayList में आइटम की अधिकतम संख्या के साथ आपको यादृच्छिक संख्या देने के लिए Random उदाहरण पूछें:

     int r = rnd.Next(list.Count); 
  3. स्ट्रिंग प्रदर्शित करें:

     MessageBox.Show((string)list[r]); 

मैं आमतौर पर विस्तार विधियों के इस छोटे संग्रह का उपयोग करता हूं:

 public static class EnumerableExtension { public static T PickRandom<T>(this IEnumerable<T> source) { return source.PickRandom(1).Single(); } public static IEnumerable<T> PickRandom<T>(this IEnumerable<T> source, int count) { return source.Shuffle().Take(count); } public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> source) { return source.OrderBy(x => Guid.NewGuid()); } } 

एक दृढ़ता से लिखित सूची के लिए, यह आपको लिखने की अनुमति देगा:

 var strings = new List<string>(); var randomString = strings.PickRandom(); 

अगर आपके पास सभी एक ArrayList है, तो आप इसे डाल सकते हैं:

 var strings = myArrayList.Cast<string>(); 

तुम कर सकते हो:

 list.OrderBy(x => Guid.NewGuid()).FirstOrDefault() 

एक Random उदाहरण बनाएँ:

 Random rnd = new Random(); 

एक यादृच्छिक स्ट्रिंग लाएं:

 string s = arraylist[rnd.Next(arraylist.Count)]; 

हालांकि, याद रखें कि यदि आप ऐसा करते हैं तो आपको Random वस्तु का पुन: उपयोग करना चाहिए। इसे एक स्थैतिक फ़ील्ड के रूप में कक्षा में रखें ताकि इसे केवल एक बार आरंभ किया जा सके और फिर इसे एक्सेस कर सकें।

या साधारण विस्तार वर्ग इस तरह से:

 public static class ColectionExtension { private static Random rng = new Random(); public static T RandomElement<T>(this IList<T> list) { return list[rng.Next(list.Count)]; } public static T RandomElement<T>(this T[] array) { return array[rng.Next(array.Length)]; } } 

तो बस कॉल करें:

 myList.RandomElement(); 

सरणियों के लिए भी काम करता है

मैं OrderBy() कॉल करने से बचना चाहूँगा क्योंकि यह बड़ा संग्रह के लिए महंगा हो सकता है इस प्रयोजन के लिए अनुक्रमित संग्रह जैसे List<T> या arrays का उपयोग करें

 ArrayList ar = new ArrayList(); ar.Add(1); ar.Add(5); ar.Add(25); ar.Add(37); ar.Add(6); ar.Add(11); ar.Add(35); Random r = new Random(); int index = r.Next(0,ar.Count-1); MessageBox.Show(ar[index].ToString()); 

मुझे सिर्फ एक की जगह अधिक आइटम की आवश्यकता थी इसलिए, मैंने यह लिखा है:

 public static TList GetSelectedRandom<TList>(this TList list, int count) where TList : IList, new() { var r = new Random(); var rList = new TList(); while (count > 0 && list.Count > 0) { var n = r.Next(0, list.Count); var e = list[n]; rList.Add(e); list.RemoveAt(n); count--; } return rList; } 

इसके साथ, आप तत्वों को प्राप्त कर सकते हैं जिन्हें आप इस तरह यादृच्छिक रूप से पसंद करते हैं:

 var _allItems = new List<TModel>() { // ... // ... // ... } var randomItemList = _allItems.GetSelectedRandom(10); 

मैं थोड़ी देर के लिए इस ExtensionMethod का उपयोग कर रहा हूं:

 public static IEnumerable<T> GetRandom<T>(this IEnumerable<T> list, int count) { if (count <= 0) yield break; var r = new Random(); int limit = (count * 10); foreach (var item in list.OrderBy(x => r.Next(0, limit)).Take(count)) yield return item; } 

क्यों नहीं:

 public static T GetRandom<T>(this IEnumerable<T> list) { return list.ElementAt(new Random(DateTime.Now.Millisecond).Next(list.Count())); }