IEnumerable সমর্থন করে এমন কোনও সংগ্রহের মধ্য দিয়ে কীভাবে লুপ করবেন?


90

IEnumerable সমর্থন করে এমন কোনও সংগ্রহের মধ্য দিয়ে কীভাবে লুপ করবেন?

উত্তর:


155

প্রত্যেকের জন্য একটি নিয়মিত করবে:

foreach (var item in collection)
{
    // do your stuff   
}

এটি .EuleAt () এর চেয়ে দ্রুত। দুর্ভাগ্যক্রমে, আমার ভোট আলেক্সার উত্তরে লক হয়েছে তাই আমি এটিকে পূর্বাবস্থায় ফেরাতে পারি না তবে এটি সেরা উত্তর answer +1
লিও গুরদিয়ান

তাহলে আপনি কীভাবে "সম্ভাব্য একাধিক গণনার গণনা" ঠিক করবেন?
শার্পসি

4
@ শার্পসি: সবচেয়ে সহজ উপায় হ'ল ফলাফলটি একটি তালিকা <ট> বা একটি অ্যারেতে টানুন এবং তারপরে এটি পুনরুক্ত করার জন্য প্রয়োজনীয় বিভিন্ন স্থানে পৌঁছে দিন। এটি গ্যারান্টি দেয় যে ফলাফলের (সম্ভাব্য ব্যয়বহুল) গণনাটি কেবল একবার হয়, তবে ফলটি মেমোরিতে সঞ্চয় করে ব্যয় করে। আমার প্রথম পদক্ষেপটি হ'ল একাধিক গণনা আসলে সমস্যা কিনা কিনা তা খুঁজে বের করা।
ফ্রেডরিক মের্ক

94

একটি foreachলুপ ব্যবহারের ইতিমধ্যে প্রস্তাবিত পদ্ধতির পাশাপাশি , আমি ভেবেছিলাম আমি আরও উল্লেখ করতে পারি যে যে কোনও অবজেক্ট প্রয়োগ IEnumerableকরে IEnumeratorতা GetEnumeratorপদ্ধতিটির মাধ্যমে একটি ইন্টারফেসও সরবরাহ করে । যদিও এই পদ্ধতিটি সাধারণত প্রয়োজন হয় না, এটি সংগ্রহের মাধ্যমে ম্যানুয়ালি পুনরাবৃত্তি করার জন্য ব্যবহার করা যেতে পারে এবং সংগ্রহের জন্য আপনার নিজস্ব এক্সটেনশন পদ্ধতিগুলি লেখার সময় এটি বিশেষভাবে কার্যকর।

IEnumerable<T> mySequence;
using (var sequenceEnum = mySequence.GetEnumerator())
{
    while (sequenceEnum.MoveNext())
    {
        // Do something with sequenceEnum.Current.
    }
}

একটি প্রধান উদাহরণটি হ'ল যখন আপনি একযোগে দুটি অনুক্রমের উপর পুনরাবৃত্তি করতে চান , যা কোনও foreachলুপের সাহায্যে সম্ভব নয় ।


7
গণকের নিষ্পত্তি করতে ভুলবেন না।
এরিক লিপার্ট

@ এরিক: হ্যাঁ, আমি এটিকে যুক্ত করব কারণ এটি মিস করা সহজ।
নলডোরিন

4
আমি মনে করি এটি কেবল আইনিম্যুয়াল <T> অবজেক্টের জন্য কাজ করবে এবং আইনিউমারেবলের জন্য নয়। আমার একটি জেনেরিক কেস হয়েছিল যার মধ্যে আমাকে আইইনুমেবলের কাছে কাস্ট করতে হয়েছিল এবং অতএব, আমার কাছে getEnumerator পদ্ধতি উপলব্ধ ছিল না। যাইহোক বেশিরভাগ ক্ষেত্রেই ভাল লাগছে।
ফ্যাবিও মিলহেইরো

50

বা এমনকি খুব ক্লাসিক পুরানো ফ্যাশন পদ্ধতি

IEnumerable<string> collection = new List<string>() { "a", "b", "c" };

for(int i = 0; i < collection.Count(); i++) 
{
    string str1 = collection.ElementAt(i);
    // do your stuff   
}

সম্ভবত আপনি এই পদ্ধতিটিও পছন্দ করতে পারেন :-)


9
এটি কেন এত উপার্জন করে? এটি একবারের পরিবর্তে 2n বার গণনার গণনা করবে।
রোমান রেইনার

4
@ রোমানরাইনার কারণ এটি কাজ করে, কিছু লোকরা পারফরম্যান্স নিয়ে মাথা ঘামায় না :)
খতিব ৩২১১

@ রোমানরাইনার এটি একটি ভাল উদাহরণ, আমার একটি সংগ্রহের প্রতিটি উপাদান অন্য সংকলনে অর্পণ করা দরকার, আমি মনে করি যে আমি
পূর্বাভাস

4
আপনি যদি এলিমেন্টএটি প্রয়োগের দিকে তাকান তবে আপনি আবিষ্কার করতে পারেন যে সংগ্রহটি যদি একটি আইলিস্ট হয় তবে তারা সূচকটিতে উপাদানটি [] ব্যবহার করে ফিরে আসে; [] হিসাবে যেমন কর্মক্ষমতা, তবে; যদি তা না হয় তবে তারা এনুমুরেটর পাবেন এবং ফিরে আসার আগে ধারাবাহিকভাবে একটি পুনরাবৃত্তি শুরু করবেন, সুতরাং মূলত প্রতিটি উপাদানগুলির জন্য তারা একটি নতুন অঙ্ক তৈরি করে এবং তালিকাটি আবার নেভিগেট করে ...
ইস্রায়েল গার্সিয়া

4
এটি সর্বোপরি আরও খারাপ, আইনামিউরেবল গণনা () বা এলিমেন্টএট () সমর্থন করে না। আমার মনে হয় সে আইলিস্টের কথা ভাবছে। এটি আসলে প্রশ্নের কোনও উত্তর দেয় না।
ক্রোয়ে


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.