আমি কীভাবে একটি তালিকা <টি> মাধ্যমে লুপ করতে পারি এবং প্রতিটি আইটেম ধরতে পারি?


176

আমি কীভাবে একটি তালিকা দিয়ে লুপ করতে পারি এবং প্রতিটি আইটেম ধরতে পারি?

আমি আউটপুটটি দেখতে দেখতে চাই:

Console.WriteLine("amount is {0}, and type is {1}", myMoney.amount, myMoney.type);

আমার কোডটি এখানে:

static void Main(string[] args)
{
    List<Money> myMoney = new List<Money> 
    {
        new Money{amount = 10, type = "US"},
        new Money{amount = 20, type = "US"}
    };
}

class Money
{
    public int amount { get; set; }
    public string type { get; set; }
}

উত্তর:


274

foreach:

foreach (var money in myMoney) {
    Console.WriteLine("Amount is {0} and type is {1}", money.amount, money.type);
}

এমএসডিএন লিংক

বিকল্পভাবে, কারণ এটি একটি List<T>.. যা একটি সূচক পদ্ধতি প্রয়োগ করে [], আপনি সাধারণ forলুপটিও ব্যবহার করতে পারেন .. যদিও এর কম পাঠযোগ্য (আইএমও):

for (var i = 0; i < myMoney.Count; i++) {
    Console.WriteLine("Amount is {0} and type is {1}", myMoney[i].amount, myMoney[i].type);
}

7
@awudoin কি? না এটি না .. এটি স্ট্যাকের উপর একটি রেফারেন্স তৈরি করে .. এটি ব্যতীত, এটি করে না। একটি foreachবস্তু ক্লোন করে না ..
সাইমন হোয়াইটহেড

2
আমার স্পষ্ট করা উচিত: এটি একটি Enumerator.. যা একটি struct.. যা স্ট্যাকের মধ্যেও তৈরি করে। সুতরাং আমি এখনও আপনার মন্তব্যে যা পেয়েছিলাম তা পুরোপুরি পাই না।
সাইমন হোয়াইটহেড

7
আপনি ঠিক বলেছেন .... এটি কেবল একটি Enumeratorএবং অবজেক্টের অনুলিপি নয়। তবে বাস্তবে রয়ে গেছে, আপনি সেখানে যা করছেন তার উপর নির্ভর করে একটি foreachলুপ বনাম একটি forলুপের সাথে আরও বেশি ওভারহেড রয়েছে । আমি আপনার কোডটিতে 100,000 এন্ট্রি সহ সবেমাত্র একটি দ্রুত পরীক্ষা চালিয়েছি Listএবং foreachলুপটি দ্বিগুণ হয়ে গেছে (বাস্তবে দীর্ঘ 1.9 বার)। এটি সমস্ত পরিস্থিতিতে অগত্যা সত্য নয়, তবে অনেকের ক্ষেত্রেই। এটি তালিকার আকারের উপর নির্ভর করে, আপনি লুপের মধ্যে কতগুলি ক্রিয়াকলাপ করেন ইত্যাদি .... .... আমি এটাই পেয়ে যাচ্ছিলাম।
অডুয়ডোইন

36

কেবল সম্পূর্ণতার জন্য, এখানে লাইনকিউ / ল্যাম্বদা উপায়ও রয়েছে:

myMoney.ForEach((theMoney) => Console.WriteLine("amount is {0}, and type is {1}", theMoney.amount, theMoney.type));

20

ঠিক অন্য কোনও সংগ্রহের মতো। List<T>.ForEachপদ্ধতিটি সংযোজন সহ ।

foreach (var item in myMoney)
    Console.WriteLine("amount is {0}, and type is {1}", item.amount, item.type);

for (int i = 0; i < myMoney.Count; i++)
    Console.WriteLine("amount is {0}, and type is {1}", myMoney[i].amount, myMoney[i].type);

myMoney.ForEach(item => Console.WriteLine("amount is {0}, and type is {1}", item.amount, item.type));

6
সতর্কতার আরেকটি শব্দ, যদি আপনার কাছে একটি বড় তালিকা থাকে, (বড় করে আমার অর্থ 100,000 আইটেমের বেশি) আমার মনি। অ্যাকাউন্টটি গণনা করার জন্য তালিকাটি অতিক্রম করতে হবে এবং মাইমোনির উপরের উদাহরণগুলিতে কিছুটা সময় নেওয়া শুরু করবে। লুপের চারপাশে প্রতিবার গণনা করা হয়। সুতরাং int myMoneyC = myMoney.Count ব্যবহার করে; (int i = 0; i <myMoneyC; i++) এর জন্য এই লুপটি বহুগুণ দ্রুততর করবে।
সুপারজিএসজে

12

এভাবেই আমি আরও ব্যবহার করে লিখব functional way। কোডটি এখানে:

new List<Money>()
{
     new Money() { Amount = 10, Type = "US"},
     new Money() { Amount = 20, Type = "US"}
}
.ForEach(money =>
{
    Console.WriteLine($"amount is {money.Amount}, and type is {money.Type}");
});

2
ধন্যবাদ। এই কাজটি অর্জনের জন্য এটি খুব ছোট উপায়। আপনি ভিটি 2017 /। নেট 4.7 এ প্রবর্তিত রাইটলাইনটির নতুন এবং কমপ্যাক্ট বাক্য গঠন ব্যবহার করেছেন।
গভীর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.