दिलचस्प पोस्ट
क्या एक तत्व पर घुमना और एक अलग तत्व को प्रभावित करने का कोई तरीका है? पायथन में पॉइंटर्स अनुकरण करना मैं अजगर में रिकर्सिव फ़ंक्शन कैसे बना सकता हूं? पीडीएफ में एचटीएमएल को एनएटीटी में कनवर्ट करें PHP में cURL का उपयोग कर फ़ाइल स्ट्रिंग पोस्ट करें? 'सुपर' कीवर्ड के साथ जेनरिक बाउंडिंग कैसे PHP के लिए env चर सेट करने के लिए? गाऊसी किसी भी अंतर्निहित गाऊसी कार्यों का उपयोग किए बिना एक छवि को कैसे धुंधला कर सकता है? कैसे हाइबरनेट HQL परिणामों के साथ प्रकार सुरक्षा चेतावनियों से बचने के लिए? दृश्य स्टूडियो डिबगर – Hex में पूर्णांक मान प्रदर्शित करना मैं AngularJS 'ng- विकल्प में वैल्यू संपत्ति कैसे सेट करूं? IOS7 में UIAlertView ऐडस्यूबव्यू एक प्रपत्र में दर्ज करने के लिए दाब करने के लिए डिफ़ॉल्ट कार्रवाई अद्वितीय पहचानकर्ता द्वारा समेकित और एक स्ट्रिंग में संबंधित मानों को जोड़ना अरबी भाषा के लिए नियमित अभिव्यक्ति

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

मेरे पास एक 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())); }