मैं बहुतसी # संकेत दिए गए, iterators और जेनरिक
स्टम्प्ड हूँ मैं एक सी ++ इटरेटर की तरह सी # में एक iterator उपयोग कर सकते हैं कैसे? मुझे एक शुरुआत() या अंत() एक्सेसर नहीं मिल रहा है, मैं यह भी नहीं पता कि एक इटरेटर घोषित कैसे किया जाए। मैंने Ienumerator के बारे में पढ़ा है। मेरा लक्ष्य मर्ज फ़ंक्शन को कार्यान्वित करना है। यहां C++ में लिखे गए मेरे मर्ज फ़ंक्शन का हिस्सा है। अधिकांशतः, मैं दिखाए गए सी # समकक्ष की तलाश में हूं, सिवाय इसके कि मैं पूर्णांक के बजाय संदर्भ प्रकार का उपयोग करूँगा।
void merge(vector<int>::iterator left, vector<int>::iterator right, vector<int>::iterator leftEnd, vector<int>::iterator rightEnd, vector<int>::iterator full)
{
while(left != leftEnd && right!= rightEnd) //compare left and right until the end of the vector is reached
{
if(*right < *left) //right < left so insert right to the output vector and advance the iterators
{
*full++ = *right++;
}
else //left < right so insert left to the output vector and advance the iterators
{
*full++ = *left++;
}
}
while(left != leftEnd) //copy any remaining elements into the output from left
{
*full++ = *left++;
}
}
इसके अलावा, मुझे किस संग्रह का उपयोग करना चाहिए? (वर्तमान में मैं List<T>
और LinkedList<T>
) का प्रयास कर रहा हूं। - नेट iterators आप अंतर्निहित संग्रह में परिवर्तन कर न दें
bool leftValid = left.MoveNext();
bool rightValid = right.MoveNext();
while (leftValid && rightValid)
{
if (right.Current < left.Current)
{
full.Add(right.Current);
rightValid = right.MoveNext();
}
else
{
full.Add(left.Current);
leftValid = left.MoveNext();
}
}
while (leftValid)
{
full.Add(left.Current);
leftValid = left.MoveNext();
}
while (rightValid)
{
full.Add(right.Current);
rightValid = right.MoveNext();
}
यहाँ full
IList<T>
किसी प्रकार की आवश्यकता होगी:
क्या आप [Enumerable.Concat (TSource) विधि को फिर से कार्यान्वित नहीं कर रहे हैं] (http://msdn.microsoft.com/en-us/library/bb302894.aspx)? –
@ सर्ज संख्या, यह मर्ज सॉर्ट का मर्ज हिस्सा है। नोट 'अगर (* दाएं <* बाएं)' – CodesInChaos