विफल रहा है मैं linq का उपयोग कर सी # का उपयोग कर एक कार्यात्मक शैली में quicksort लागू करने की कोशिश कर रहा हूँ, और यह कोड यादृच्छिक रूप से काम करता है/काम नहीं करता है, और मैं समझ नहीं सकता क्यों।
उल्लेख करने के लिए महत्वपूर्ण: जब मैं इसे किसी सरणी या सूची पर कॉल करता हूं, तो यह ठीक काम करता है। लेकिन पर एक अज्ञात-क्या यह वास्तव में-है IEnumerable, यह पागल (मान या दुर्घटनाओं, आम तौर पर कभी कभी काम करता है खो देता है।।) चला जाता है
कोड:सी # कार्यात्मक Quicksort
public static IEnumerable<T> Quicksort<T>(this IEnumerable<T> source) where T : IComparable<T> { if (!source.Any()) yield break; var pivot = source.First(); var sortedQuery = source.Skip(1).Where(a => a.CompareTo(source.First()) <= 0).Quicksort() .Concat(new[] { pivot }) .Concat(source.Skip(1).Where(a => a.CompareTo(source.First()) > 0).Quicksort()); foreach (T key in sortedQuery) yield return key; }
आप किसी भी दोष मिल सकता है यहां इससे असफल होने का कारण होगा?
संपादित करें: कुछ बेहतर परीक्षण कोड:
var rand = new Random(); var ienum = Enumerable.Range(1, 100).Select(a => rand.Next()); var array = ienum.ToArray(); try { array.Quicksort().Count(); Console.WriteLine("Array went fine."); } catch (Exception ex) { Console.WriteLine("Array did not go fine ({0}).", ex.Message); } try { ienum.Quicksort().Count(); Console.WriteLine("IEnumerable went fine."); } catch (Exception ex) { Console.WriteLine("IEnumerable did not go fine ({0}).", ex.Message); }
आपका क्या मतलब है 'अज्ञात-क्या-वास्तव में- IENumerable' है ?? यह एक सामान्य विधि है, इसलिए आपके ऑब्जेक्ट के प्रकार हमेशा ज्ञात होते हैं। –
मेरा मतलब है कि मुझे नहीं पता कि IENumerable खोल के नीचे क्या है। क्या यह एक सूची है? एक सरणी? मैंने जो कोशिश की और एक सूची से क्या असफल रहा, जहां मैंने मूल रूप से "रैंडम रैंड = ...; int [100] किया। चयन करें (ए => rand.Next());" – Rubys