दिलचस्प पोस्ट
वसंत – @ लेनदेन – पृष्ठभूमि में क्या होता है? एक वेब पेज के लोड और निष्पादन अनुक्रम? मैं कैसे कॉल कर सकता हूँ :: CreateProcess में सी + + एक विंडोज निष्पादन योग्य शुरू करने के लिए? जावा पहुंच संशोधक और अधिभावी विधियां सीमा के साथ MySQL हटाने का विवरण SSL में SSL का उपयोग करने के लिए आप WEBrick को कैसे कॉन्फ़िगर करते हैं? सी ++ सीखने से पहले सी सीखना चाहिए? क्या एसवीजी तत्व में एक डिवीजन को जोड़ना संभव है आर में एक कॉलम के प्रत्येक अनन्य मान के लिए केवल पहली पंक्ति का चयन करें एकल उद्धरणों से बचने के लिए क्यों नहीं “ इस्तेमाल किया जाना चाहिए? जावास्क्रिप्ट के माध्यम से एक एचटीएमएल पेज से दूसरे पेज पर चलने वाले व्हेरिएबल सी में थोड़ा endian करने के लिए बड़े endian कन्वर्ट अजगर में सेलेनियम और सुंदरसूप का उपयोग करके मैं एक वेबसाइट कैसे पार्स कर सकता हूं? Templating आसान बनाने के लिए JSP चालें? पीढ़ी में बहुआयामी सरणी के लिए "this.that.other" जैसे डॉट सिंटैक्स को कनवर्ट करें

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

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

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

Solutions Collecting From Web of "सूची में यादृच्छिक वस्तु का उपयोग करें"

  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())); }