मैं कभी-कभी स्थिति में हूं कि मुझे कई बार एक संख्या को संसाधित करना है। यदि गणना महंगा है, गैर-दोहराने योग्य है और बहुत सारे डेटा उत्पन्न करता है (जैसे डेटाबेस से पढ़ा जाने वाला IQueryable), कई बार गणना करना एक विकल्प नहीं है, न ही परिणाम में स्मृति को बफर कर रहा है।
आज तक मैं अक्सर एग्रीगेटर कक्षाएं लिखता हूं जिसमें मैं फोरैच लूप में वस्तुओं को धक्का दे सकता हूं और आखिरकार परिणाम निकाल सकता हूं - LINQ से बहुत कम सुरुचिपूर्ण है।
लेकिन प्रतीक्षा करें, क्या मैंने अभी "पुश" कहा था? क्या वह आवाज नहीं है ... प्रतिक्रियाशील? तो मैं आज रात की सैर के दौरान सोच रहा था। घर वापस मैंने कोशिश की - और यह काम करता है!
उदाहरण टुकड़ा दिखाता है कि कैसे एक भी पास में पूर्णांक के अनुक्रम से दोनों न्यूनतम और अधिकतम आइटम प्राप्त करने, मानक LINQ ऑपरेटर्स का उपयोग (आरएक्स के उन लोगों के, कि है):
public static MinMax GetMinMax(IEnumerable<int> source)
{
// convert source to an observable that does not enumerate (yet) when subscribed to
var connectable = source.ToObservable(Scheduler.Immediate).Publish();
// set up multiple consumers
var minimum = connectable.Min();
var maximum = connectable.Max();
// combine into final result
var final = minimum.CombineLatest(maximum, (min, max) => new MinMax { Min = min, Max = max });
// make final subscribe to consumers, which in turn subscribe to the connectable observable
var resultAsync = final.GetAwaiter();
// now that everybody is listening, enumerate!
connectable.Connect();
// result available now
return resultAsync.GetResult();
}
यह एक नहीं है सवाल का जवाब, जो था "क्या यह एक से अधिक बार IENumerable पर लिंक विधियों को कॉल करना ठीक है?" ... जवाब न है"। –
खैर, क्या "ठीक" मतलब थोड़ा अस्पष्ट है। हालांकि आप कई बार एक सूची में फिर से शुरू कर सकते हैं। मैं अपने जवाब में इस के ramifications का जिक्र है। उन पर पुन: प्रयास करना ठीक नहीं है? यदि आप ऐसा सोचते हैं तो अपना स्वयं का उत्तर पोस्ट करें (हालांकि पहले से ही एक स्वीकृत उत्तर है)। –
यह बिल्कुल स्पष्ट है। 'आइटम' एक आईनेमरेबल है, एक सूची नहीं है, और आप इसे केवल एक बार पार कर सकते हैं। एक और जवाब पोस्ट करने की कोई आवश्यकता नहीं है, लेकिन पाठकों के लिए यह समझना महत्वपूर्ण है कि यह गलत है और सवाल पर भी स्पर्श नहीं करता है। –