तो तुम कुशलतापूर्वक q
में हर 5 वस्तुओं पर Dump()
कॉल करना चाहते हैं।
आपके पास अब समाधान IEnumerable<T>
को for
लूप के माध्यम से फिर से पुन: सक्रिय करेगा। यह इस तरह से कुछ करने के लिए और अधिक कुशल हो सकता है: (मैं नहीं जानता कि क्या अपने प्रकार तो मैं T
उपयोग कर रहा हूँ है)
const int N = 5;
T[] ar = new T[N]; // Temporary array of N items.
int i=0;
foreach(var item in q) { // Just one iterator.
ar[i++] = item; // Store a reference to this item.
if (i == N) { // When we have N items,
ar.Dump(); // dump them,
i = 0; // and reset the array index.
}
}
// Dump the remaining items
if (i > 0) {
ar.Take(i).Dump();
}
यह केवल एक iterator उपयोग करता है। अपने चर को ध्यान में रखते हुए q
नाम दिया गया है, मुझे लगता है कि "क्वेरी" के लिए छोटा है, जिसका अर्थ यह है कि यह डेटाबेस के विरुद्ध है। तो केवल एक इटरेटर का उपयोग करना बहुत फायदेमंद हो सकता है।
मैं इस कोड को रख सकता हूं, और इसे एक विस्तार विधि में लपेट सकता हूं। कैसे "टक्कर" के बारे में?
public static IEnumerable<IEnumerable<T>> Clump<T>(this IEnumerable<T> items, int clumpSize) {
T[] ar = new T[clumpSize];
int i=0;
foreach(var item in items) {
ar[i++] = item;
if (i == clumpSize) {
yield return ar;
i = 0;
}
}
if (i > 0)
yield return ar.Take(i);
}
अपने कोड के संदर्भ में यह कॉलिंग:
foreach (var clump in q.Clump(5)) {
clump.Dump();
}
स्रोत
2012-10-11 05:09:46
वाह। क्षमा करें, लेकिन शेष कोड के दिखने से, मैं ** वास्तव में ** विश्वास नहीं कर सकता कि आपको यह प्रश्न पूछना है। –
umm .. मैं सोच रहा था कि किसी को पता चल सकता है कि इसे फिर से शुरू करने के लिए एक इटेटरेटर कैसे प्राप्त किया जाए या कुछ ऐसा हो ताकि मैं कुछ कह सकूं (आइटम। हासमोरे) ले लो (5) .... मैं भी कोडिंग कर सकता हूं लंबा ... :) –
मुझे लगता है कि मुझे याद आया कि आप वास्तव में क्या करने की कोशिश कर रहे थे। माफ़ी माफी - नीचे मेरा जवाब देखें। –