কীভাবে একটি তালিকা <T> প্রদত্ত আকারে (ক্ষমতার বিপরীতে) শুরু করবেন?


111

.NET একটি জেনেরিক তালিকা ধারক সরবরাহ করে যার পারফরম্যান্স প্রায় অভিন্ন ((অ্যারে বনাম তালিকার প্রশ্নগুলির পারফরম্যান্স দেখুন)। তবে এগুলি আরম্ভের ক্ষেত্রে একেবারেই আলাদা।

অ্যারেগুলি ডিফল্ট মান দিয়ে শুরু করা খুব সহজ এবং সংজ্ঞা অনুসারে তাদের ইতিমধ্যে নির্দিষ্ট আকার রয়েছে:

string[] Ar = new string[10];

যা একজনকে নিরাপদে এলোমেলো আইটেম বরাদ্দ করতে দেয়, বলুন:

Ar[5]="hello";

তালিকাগুলির সাথে জিনিসগুলি আরও জটিল। আমি একই সূচনা করার দুটি উপায় দেখতে পাচ্ছি, যার মধ্যে কোনওটিই আপনি মার্জিত বলবেন না:

List<string> L = new List<string>(10);
for (int i=0;i<10;i++) L.Add(null);

অথবা

string[] Ar = new string[10];
List<string> L = new List<string>(Ar);

একটি পরিষ্কার উপায় কি হবে?

সম্পাদনা: এখন পর্যন্ত উত্তরগুলি সক্ষমতা বোঝায়, যা একটি তালিকা প্রাক-জনপ্রিয়করণ ব্যতীত অন্য কিছু। উদাহরণস্বরূপ, কেবলমাত্র 10 এর ক্ষমতা দিয়ে তৈরি একটি তালিকায়, কেউ এটি করতে পারে নাL[2]="somevalue"

সম্পাদনা 2: লোকেরা কেন বিস্মিত হয় যে আমি কেন এইভাবে তালিকাগুলি ব্যবহার করতে চাই, কারণ এটি সেভাবে ব্যবহার করার উদ্দেশ্যে নয়। আমি দুটি কারণ দেখতে পাচ্ছি:

  1. কেউ যথেষ্ট দৃinc়তার সাথে তর্ক করতে পারে যে তালিকাগুলি হ'ল "পরবর্তী প্রজন্মের" অ্যারে এবং প্রায় কোনও জরিমানা ছাড়াই নমনীয়তা যুক্ত করে। সুতরাং একটি ডিফল্ট হিসাবে তাদের ব্যবহার করা উচিত। আমি ইঙ্গিত করছি তারা সম্ভবত আরম্ভ করা সহজ না হতে পারে।

  2. আমি বর্তমানে যা লিখছি তা হ'ল একটি বড় কাঠামোর অংশ হিসাবে ডিফল্ট কার্যকারিতা সরবরাহকারী একটি বেস ক্লাস। আমি যে ডিফল্ট কার্যকারিতাটি অফার করি তাতে তালিকার আকার অগ্রিম পরিচিত এবং তাই আমি কোনও অ্যারে ব্যবহার করতে পারতাম। তবে, আমি যে কোনও বেস ক্লাসকে গতিশীলভাবে এটি প্রসারিত করার সুযোগ দিতে চাই এবং তাই আমি একটি তালিকা বেছে নিই।


1
"সম্পাদনা করুন: এখন পর্যন্ত উত্তরগুলি সক্ষমতা বোঝায়, যা তালিকার পূর্ব-পপুলেটিং ছাড়া অন্য কিছু example উদাহরণস্বরূপ, সক্ষমতা 10 দিয়ে তৈরি একটি তালিকায় কেউ এল করতে পারে না [2] =" কিছুটা "" এটি দেওয়া হয়েছে পরিবর্তন, সম্ভবত আপনার প্রশ্নের শিরোনামটি
বানান করা

তবে, খালি মান সহ একটি তালিকা প্রাক-জনপ্রিয়করণের ব্যবহার কী, টপিকস্টার্টার যা করার চেষ্টা করছেন তা কারণ?
ফ্রেডেরিক গেইলস

1
অবস্থানগত ম্যাপিং যদি তা গুরুত্বপূর্ণ হয় তবে অভিধান <<, স্ট্রিং> কোন অভিধানটি ব্যবহার করা কি আরও বেশি অর্থবোধ করে না?
গ্রেগ ডি

7
Listএর জন্য প্রতিস্থাপন নয় Array। তারা স্বতন্ত্রভাবে পৃথক সমস্যাগুলি সমাধান করে। আপনি যদি একটি নির্দিষ্ট আকার চান, আপনি একটি চান Array। আপনি যদি একটি ব্যবহার করেন তবে আপনি Listএটি করছেন ভুল।
জেনেক্সার

5
আমি সর্বদা উত্তরগুলি পাই যা "আমার কেন দরকার হবে তা আমি দেখতে পাচ্ছি না ..." এইরকম যুক্তিগুলিতে হাতুড়ি দেওয়ার চেষ্টা করে ag এর অর্থ কেবল এটি: আপনি এটি দেখতে পেলেন না। এটি অগত্যা অন্য কিছু বোঝায় না। আমি শ্রদ্ধা করি যে লোকেরা কোনও সমস্যার দিকে আরও ভাল পদ্ধতির পরামর্শ দিতে চায় তবে এটিকে আরও নম্রভাবে বলা উচিত, উদাহরণস্বরূপ "আপনার কি নিশ্চিত যে আপনার একটি তালিকা প্রয়োজন? সম্ভবত আপনি যদি আমাদের সমস্যা সম্পর্কে আমাদের আরও কিছু বলেন ..."। এই এটা আনন্দদায়ক হয়ে আকর্ষিক, এবং তাদের প্রশ্ন উন্নত করতে ওপি উৎসাহিত করে। বিজয়ী হন - নম্র হন be
আনোরজাকেন

উত্তর:


79

আমি এটি প্রায়শই প্রয়োজন বলে বলতে পারি না - আপনি কেন এটি চান তা সম্পর্কে আপনি আরও বিশদ দিতে পারবেন? আমি সম্ভবত এটি কোনও সহায়ক শ্রেণিতে স্থির পদ্ধতি হিসাবে রেখেছি:

public static class Lists
{
    public static List<T> RepeatedDefault<T>(int count)
    {
        return Repeated(default(T), count);
    }

    public static List<T> Repeated<T>(T value, int count)
    {
        List<T> ret = new List<T>(count);
        ret.AddRange(Enumerable.Repeat(value, count));
        return ret;
    }
}

আপনি ব্যবহার করতে পারেন Enumerable.Repeat(default(T), count).ToList()তবে এটি বাফার পুনরায় আকার দেওয়ার কারণে অকার্যকর হবে।

মনে রাখবেন যে যদি Tকোনও রেফারেন্স টাইপ countহয় তবে এটি valueপ্যারামিটারের জন্য পাস করা রেফারেন্সের অনুলিপিগুলি সংরক্ষণ করবে - সুতরাং তারা সকলেই একই বস্তুকে রেফার করবে। এটি আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে যা আপনি চান তা নাও হতে পারে।

সম্পাদনা: মন্তব্যগুলিতে উল্লিখিত হিসাবে, আপনি চাইলে Repeatedতালিকাটি তৈরি করতে আপনি একটি লুপ ব্যবহার করতে পারেন। এটিও কিছুটা দ্রুত হবে। ব্যক্তিগতভাবে আমি কোডটি Repeatআরও বর্ণনামূলক ব্যবহার করে খুঁজে পাই এবং সন্দেহ করি যে বাস্তব বিশ্বে পারফরম্যান্সের পার্থক্য অপ্রাসঙ্গিক হতে পারে তবে আপনার মাইলেজটি আলাদা হতে পারে।


1
আমি বুঝতে পারি এটি একটি পুরানো পোস্ট, তবে আমি আগ্রহী। অনুমিতযোগ্য ep লিঙ্কের শেষ অংশ ( dotnetperls.com/initialize-array ) অনুযায়ী লুপের তুলনায় পুনরাবৃত্ত ভাড়াগুলি আরও খারাপ । এছাড়াও অ্যাড্রেঞ্জ () এর এমএসডিএন অনুযায়ী ও (এন) জটিলতা রয়েছে। সরল লুপের পরিবর্তে প্রদত্ত সমাধানটি ব্যবহার করা কি কিছুটা পাল্টে কার্যকর নয়?
জিমি

@ জিমি: উভয় পন্থাই ও (এন) হবে এবং আমি যে পদ্ধতিটি অর্জন করতে চাইছি তার আরও বর্ণনামূলক বলে মনে করি। আপনি যদি একটি লুপ পছন্দ করেন তবে এটি নির্দ্বিধায় ব্যবহার করুন।
জন স্কিটি

@ জিমি: আরও মনে রাখবেন যে সেখানকার মানদণ্ডটি ব্যবহার করছে Enumerable.Repeat(...).ToArray(), যা আমি এটি ব্যবহার করছি না তা নয়।
জন স্কিটি

1
আমি Enumerable.Repeat()নিম্নলিখিত পদ্ধতিতে ব্যবহার করেছি ( Pairসি ++ সমমানের মতোই বাস্তবায়িত হয়েছি ): Enumerable.Repeat( new Pair<int,int>(int.MaxValue,-1), costs.Count)পার্শ্ব প্রতিক্রিয়াটি লক্ষ্য করে, যে Listকোনও একক সামগ্রীতে রেফারেন্সযুক্ত অনুলিপিগুলি পূর্ণ ছিল। সম্পূর্ণরূপে myList[i].First = 1প্রতিটি একক উপাদানকে পরিবর্তিত করার মতো উপাদান পরিবর্তন করা List। এই বাগটি পেতে আমার কয়েক ঘন্টা সময় লেগেছে। আপনি কি এই সমস্যার কোনও সমাধান জানেন (কেবলমাত্র একটি সাধারণ লুপ ব্যবহার এবং ব্যবহার ব্যতীত .Add(new Pair...)?
00zetti

1
@ Pac0, আমি স্রেফ নীচে একটি উত্তর যুক্ত করেছি। সম্পাদনাগুলি অস্বীকার করা যেতে পারে।
জেরেমি রে ব্রাউন

136
List<string> L = new List<string> ( new string[10] );

3
ব্যক্তিগতভাবে আমি মনে করি এটিই সবচেয়ে পরিষ্কার উপায় - যদিও এটি প্রশ্ন
সংস্থায়

4
+1: কেবলমাত্র এমন পরিস্থিতিতে আঘাত করুন যেখানে আমার সূচকের মাধ্যমে পপুলেশন করার আগে নালগুলির একটি নির্দিষ্ট সেট দিয়ে সূচনা করার জন্য একটি পরিবর্তনশীল আকারের তালিকা প্রয়োজন (এবং পরে অতিরিক্ত যুক্ত করা, যাতে একটি অ্যারে অনুপযুক্ত ছিল)। এই উত্তরটি ব্যবহারিক এবং সাধারণ হওয়ার জন্য আমার ভোট পায়।
কোডিং হয়ে গেছে

চমত্কার উত্তর। @ গনকোডিং আমি কেবল ভাবছিলাম যে অভ্যন্তরীণভাবে নতুন সূচনা হওয়া তালিকাটি Lকেবল মেমরির পুনঃব্যবহার করবে কিনা string[10](তালিকার ব্যাকিং স্টোরটিও একটি অ্যারে) বা এটি নিজস্ব একটি নতুন স্মৃতি বরাদ্দ করবে এবং তারপরে বিষয়বস্তুগুলি অনুলিপি করবে string[10]? পরবর্তী রাস্তাটি নির্বাচন করলে string[10]স্বয়ংক্রিয়ভাবে আবর্জনা সংগ্রহ করা হবে L
আরবিটি

3
@ আরবিটি এটি এই পদ্ধতির একমাত্র অনর্থক: অ্যারেটি পুনরায় ব্যবহার করা হবে না , সুতরাং আপনার কাছে মুহুর্তে অ্যারের দুটি অনুলিপি থাকবে (তালিকাটি অভ্যন্তরীণভাবে অ্যারে ব্যবহার করে যা আপনি সচেতন বলে মনে করছেন)। বিরল ক্ষেত্রে যদি আপনার বিপুল সংখ্যক উপাদান বা স্মৃতিশক্তি বাধা থাকে তবে সমস্যা হতে পারে । এবং হ্যাঁ অতিরিক্ত নির্ধারণকারী তালিকা তৈরির কাজ শেষ হওয়ার সাথে সাথে আবর্জনা সংগ্রহের জন্য যোগ্য হয়ে উঠবে (অন্যথায় এটি একটি ভয়াবহ স্মৃতি ফাঁস হত)। নোট করুন যে যোগ্য মানে "এখনই সংগ্রহ করা" নয়, বরং পরের বার আবর্জনা সংগ্রহ চলবে।
আনোরজাকেন

2
এই উত্তরটি 10 ​​টি নতুন স্ট্রিং বরাদ্দ করে - তারপরে পুনরাবৃত্তি করে তাদের প্রয়োজনীয়গুলি অনুলিপি করে। আপনি যদি বড় অ্যারে নিয়ে কাজ করছেন; এমনকি এটি বিবেচনা করবেন না কারণ এটি গৃহীত উত্তরের চেয়ে দ্বিগুণ মেমরির প্রয়োজন।
ইউ কে মুনকি

22

কনস্ট্রাক্টরটি ব্যবহার করুন যা একটি আর্গুমেন্ট হিসাবে একটি ("ক্ষমতা") নেয়:

List<string> = new List<string>(10);

সম্পাদনা: আমার ফ্রেড্রিকের সাথে একমত হওয়া উচিত। আপনি তালিকাটি এমনভাবে ব্যবহার করছেন যা এটি প্রথম স্থানে ব্যবহার করার পিছনে পুরো যুক্তির বিপরীতে যায়।

EDIT2:

সম্পাদনা 2: আমি বর্তমানে যা লিখছি তা হ'ল একটি বড় কাঠামোর অংশ হিসাবে ডিফল্ট কার্যকারিতা সরবরাহকারী একটি বেস শ্রেণি। আমি যে ডিফল্ট কার্যকারিতাটি অফার করি তাতে তালিকার আকার অগ্রিম পরিচিত এবং তাই আমি কোনও অ্যারে ব্যবহার করতে পারতাম। তবে, আমি যে কোনও বেস ক্লাসকে গতিশীলভাবে এটি প্রসারিত করার সুযোগ দিতে চাই এবং তাই আমি একটি তালিকা বেছে নিই।

কেন সকল নাল মান সহ একটি তালিকার আকার জানতে হবে? যদি তালিকার কোনও আসল মান না থাকে তবে আমি দৈর্ঘ্যটি 0 হওয়ার আশা করব, যাইহোক, এটি যে কলুষতাপূর্ণ তা প্রমাণ করে যে এটি শ্রেণীর উদ্দেশ্যযুক্ত ব্যবহারের বিরুদ্ধে চলেছে।


46
এই উত্তর তালিকায় 10 টি নাল এন্ট্রি বরাদ্দ করে না (যা প্রয়োজন ছিল), তালিকার পুনরায় আকার দেওয়ার প্রয়োজনের আগে (যেমন ক্ষমতা) এটি কেবল 10 টি প্রবেশের জন্য স্থান বরাদ্দ করে , সুতরাং new List<string>()সমস্যাটি যতদূর যায় তার থেকে আলাদা কিছু হয় না this । যদিও অনেক বেশি ভোট পেয়ে ভাল হয়েছে :)
কোডিং

2
ওভারলোডেড কনস্ট্রাক্টর হ'ল "প্রাথমিক ক্ষমতা" মানটি "আকার" বা "দৈর্ঘ্য" নয়, এবং এটি আইটেমগুলিকে আরম্ভ করে না
ম্যাট উইলকো

"কারও এটির প্রয়োজন কেন" এর উত্তর দেওয়ার জন্য: গভীর ক্লোনিং ট্রি ডেটা স্ট্রাকচারের জন্য আমার এখনই এটি প্রয়োজন। একটি নোড তার বাচ্চাদের পপুলেশন করতে পারে বা নাও পারে, তবুও আমার বেস নোড ক্লাসটি সমস্ত শিশু নোডের সাথে নিজেকে ক্লোন করতে সক্ষম হতে হবে। বেলা, ব্লহ এটি আরও জটিল। তবে আমার দু'জনের দরকার আমার এখনও খালি তালিকাটি পপুল list[index] = obj;করার জন্য এবং কিছু অন্যান্য তালিকার ক্ষমতা ব্যবহার করার জন্য।
বিটারব্লু

3
@ বিটারব্লু: এছাড়াও, প্রাক-বরাদ্দকৃত ম্যাপিংয়ের যে কোনও ধরণের যেখানে আপনার কাছে সমস্ত মান সামনে নাও থাকতে পারে। অবশ্যই ব্যবহার আছে; আমি এই উত্তরটি আমার কম অভিজ্ঞ দিনগুলিতে লিখেছি।
এড এস

8

আপনি প্রথমে যে আইটেমগুলি চান তার সংখ্যা সহ একটি অ্যারে তৈরি করুন এবং তারপরে অ্যারেটিকে একটি তালিকায় রূপান্তর করুন।

int[] fakeArray = new int[10];

List<int> list = fakeArray.ToList();

7

আপনি যদি একটি নির্দিষ্ট মান দিয়ে এটিকে আরম্ভ করতে চান তবে আপনি কেন একটি তালিকা ব্যবহার করছেন? আমি বুঝতে পারি যে - পারফরম্যান্সের খাতিরে- আপনি এটিকে প্রাথমিক ক্ষমতা দিতে চান, তবে যখন প্রয়োজন হয় তখন এটি বাড়তে পারে এমন নিয়মিত অ্যারে তালিকার কোনও সুবিধা নয়?

আপনি যখন এটি করবেন:

List<int> = new List<int>(100);

আপনি একটি তালিকা তৈরি করেন যার ক্ষমতা 100 পূর্ণসংখ্যার। এর অর্থ হল যে আপনি 101 তম আইটেমটি যোগ না করা পর্যন্ত আপনার তালিকার 'বাড়ার' দরকার নেই। তালিকার অন্তর্নিহিত অ্যারেটি 100 দৈর্ঘ্য দিয়ে শুরু করা হবে।


1
"আপনি যদি একটি নির্দিষ্ট মান দিয়ে আরম্ভ করতে চান তবে আপনি কেন একটি তালিকা ব্যবহার করছেন" একটি ভাল পয়েন্ট।
এড এস।

7
তিনি এমন একটি তালিকা চেয়েছিলেন যাতে প্রতিটি উপাদানকে আরম্ভ করা হয়েছিল এবং তালিকার একটি ক্ষমতা ছিল, কেবল ক্ষমতা নয়। এই উত্তরটি এখন যেমন দাঁড়িয়েছে তেমনি ভুল।
নিক ফস্টার

প্রশ্নটির একটি উত্তর প্রয়োজন, জিজ্ঞাসা করার সমালোচনা নয়। কখনও কখনও অ্যারে ব্যবহারের বিপরীতে এটি এভাবে করার কারণ রয়েছে। কেন এটি হতে পারে তা আগ্রহী হলে, কেউ এর জন্য স্ট্যাক ওভারফ্লো প্রশ্ন করতে পারে।
দিনো দিনি

5

এই জাতীয় তালিকার বিষয়বস্তু সূচনা করা আসলে তালিকার জন্য যা তা নয়। তালিকা অবজেক্টগুলি ধরে রাখতে ডিজাইন করা হয়েছে। আপনি যদি নির্দিষ্ট অবজেক্টগুলিতে নির্দিষ্ট নম্বরগুলিকে মানচিত্র করতে চান তবে তালিকার পরিবর্তে একটি হ্যাশ টেবিল বা অভিধানের মতো কী-মান জোড় কাঠামোটি ব্যবহারের বিষয়টি বিবেচনা করুন।


এটি প্রশ্নের উত্তর দেয় না, তবে কেবল এটি জিজ্ঞাসা না করার কারণ দেয়।
দিনো দিনি

5

আপনি আপনার ডেটার সাথে অবস্থানগত সংস্থার প্রয়োজনীয়তার উপর জোর দিচ্ছেন বলে মনে হচ্ছে, সুতরাং কোনও সহযোগী অ্যারে কি আরও উপযুক্ত হবে না?

Dictionary<int, string> foo = new Dictionary<int, string>();
foo[2] = "string";

এটি যাকে জিজ্ঞাসা করা হচ্ছে তার একটি পৃথক প্রশ্নের উত্তর দিচ্ছে।
দিনো দিনি

4

আপনি যদি কিছু নির্দিষ্ট মানের এন উপাদানগুলির সাথে তালিকাটি শুরু করতে চান:

public List<T> InitList<T>(int count, T initValue)
{
  return Enumerable.Repeat(initValue, count).ToList();
}

এই কৌশলটি দ্বারা বাফার পুনরায় আকার দেওয়ার বিষয়ে উদ্বেগের জন্য জন স্কিটির উত্তর দেখুন।
অ্যামি বি

1

আপনার তালিকাটি ডিফল্ট মান দিয়ে চতুরতার সাথে সূচনা করতে আপনি লিনক ব্যবহার করতে পারেন। ( ডেভিড বি এর উত্তরের মতো ।)

var defaultStrings = (new int[10]).Select(x => "my value").ToList();

আরও একধাপ এগিয়ে যান এবং প্রতিটি স্ট্রিংকে পৃথক মান "স্ট্রিং 1", "স্ট্রিং 2", "স্ট্রিং 3" ইত্যাদি দিয়ে শুরু করুন:

int x = 1;
var numberedStrings = (new int[10]).Select(x => "string " + x++).ToList();

1
string [] temp = new string[] {"1","2","3"};
List<string> temp2 = temp.ToList();

তালিকা সম্পর্কে <স্ট্রিং> টেম 2 = নতুন তালিকা <স্ট্রিং> (টেম্পে); ইতিমধ্যে প্রস্তাবিত ওপি পছন্দ।
এড এস।

এড - এটি আসলে প্রশ্নের উত্তর দেয় - যা ক্ষমতা সম্পর্কে নয়।
বোয়াজ

তবে ওপি ইতিমধ্যে জানিয়েছে যে তিনি এই সমাধানটি পছন্দ করেন না।
এড এস

1

গৃহীত উত্তরের (সবুজ চেক চিহ্ন সহ একটি) একটি সমস্যা রয়েছে।

সমস্যাটি:

var result = Lists.Repeated(new MyType(), sizeOfList);
// each item in the list references the same MyType() object
// if you edit item 1 in the list, you are also editing item 2 in the list

আমি অবজেক্টের অনুলিপি সম্পাদনের জন্য উপরের লাইনটি পরিবর্তন করার পরামর্শ দিচ্ছি। সে সম্পর্কে অনেকগুলি নিবন্ধ রয়েছে:

আপনি যদি আপনার তালিকার প্রতিটি আইটেমটি NULL এর পরিবর্তে ডিফল্ট কনস্ট্রাক্টরের সাথে সূচনা করতে চান তবে নীচের পদ্ধতিটি যুক্ত করুন:

public static List<T> RepeatedDefaultInstance<T>(int count)
    {
        List<T> ret = new List<T>(count);
        for (var i = 0; i < count; i++)
        {
            ret.Add((T)Activator.CreateInstance(typeof(T)));
        }
        return ret;
    }

1
এটি কোনও "সমস্যা" নয় - রেফারেন্সগুলি অনুলিপি করার এটি স্বাভাবিক আচরণ। পরিস্থিতি না জেনে আপনি অবজেক্টটি অনুলিপি করার উপযুক্ত কিনা তা আপনি জানতে পারবেন না। তালিকাগুলি অনুলিপি সহ পপুলেশন করা উচিত কি না - প্রশ্নটি সামর্থ্য সহ একটি তালিকা শুরু করার বিষয়ে নয়। আমি আচরণ এটাকে পরিপ্রেক্ষিতে আমার উত্তর নির্মল করব না , কিন্তু আমি সত্যিই এটা এই প্রশ্নের প্রেক্ষাপটে একটি সমস্যা হিসেবে বড়, মোট ছাত্র মনে করি না।
জন স্কিটে

@ জোনস্কিট, আমি স্থির সহায়ককে জবাব দিচ্ছিলাম, যা আদিম ধরণের জন্য ঠিক তবে রেফারেন্স ধরণের নয়। একই পরিস্থিতিতে রেফারেন্সযুক্ত আইটেমের সাথে তালিকার সূচনা করা একটি দৃশ্য সঠিক মনে হয় না। সেই দৃশ্যে কেন তালিকা রয়েছে যদি এর প্রতিটি আইটেম হিপগুলিতে একই বস্তুটিকে নির্দেশ করে।
জেরেমি রে ব্রাউন

নমুনা পরিস্থিতি: আপনি প্রতিটি উপাদানগুলির জন্য প্রাথমিকভাবে "অজানা" এন্ট্রি সহ স্ট্রিংগুলির একটি তালিকা তৈরি করতে চান, তারপরে আপনি নির্দিষ্ট উপাদানের জন্য তালিকাটি সংশোধন করুন। সেক্ষেত্রে সমস্ত "অজানা" মান একই স্ট্রিংয়ের উল্লেখ হওয়া সম্পূর্ণরূপে যুক্তিসঙ্গত। প্রতিবার স্ট্রিংটি ক্লোন করা অর্থহীন হবে। একই বস্তুর একাধিক উল্লেখের সাথে একটি স্ট্রিং পপুলেট করা সাধারণ অর্থে "সঠিক" বা "ভুল" নয়। এতক্ষণ যে পাঠকরা আচরণটি কী তা জানেন, এটি তাদের নির্দিষ্ট ব্যবহারের ক্ষেত্রে পূরণ করে কিনা তা সিদ্ধান্ত নেওয়া তাদের উপর নির্ভর করে ।
জন স্কিটি

0

IList সম্পর্কে একটি নোটিশ: MSDN IList মন্তব্য : "IList বাস্তবায়নগুলি তিনটি বিভাগে পড়ে: কেবলমাত্র পঠনযোগ্য, স্থির আকার এবং ভেরিয়েবল-আকার। (...)। এই ইন্টারফেসের জেনেরিক সংস্করণের জন্য দেখুন System.Collections.Generic.IList<T>।"

IList<T>থেকে উত্তরাধিকারসূত্রে প্রাপ্ত হয় না IList(তবে List<T>উভয় প্রয়োগ করে IList<T>এবং IList) তবে তা সর্বদা পরিবর্তনশীল-আকারের হয় । নেট 4.5.৪, যেহেতু আমাদের কাছে IReadOnlyList<T>আফাইক রয়েছে, সেখানে কোনও স্থির আকারের জেনেরিক তালিকা নেই যা আপনি যা খুঁজছেন তা হবে।


0

এটি আমার ইউনিট পরীক্ষার জন্য ব্যবহৃত একটি নমুনা। আমি ক্লাস অবজেক্টের একটি তালিকা তৈরি করেছি। তারপরে আমি পরিষেবা থেকে প্রত্যাশা করা 'এক্স' সংখ্যার অবজেক্ট যুক্ত করার জন্য আমি অনূর্ধ্ব ব্যবহার করেছি। এইভাবে আপনি যে কোনও আকারের জন্য একটি তালিকা যুক্ত / সূচনা করতে পারেন।

public void TestMethod1()
    {
        var expected = new List<DotaViewer.Interface.DotaHero>();
        for (int i = 0; i < 22; i++)//You add empty initialization here
        {
            var temp = new DotaViewer.Interface.DotaHero();
            expected.Add(temp);
        }
        var nw = new DotaHeroCsvService();
        var items = nw.GetHero();

        CollectionAssert.AreEqual(expected,items);


    }

আশা করি আপনাদের জন্য আমি সাহায্যকারী ছিলাম।


-1

কিছুটা দেরি হলেও আপনার সমাধান করা প্রথম সমাধানটি আমার কাছে আরও পরিষ্কার মনে হচ্ছে: আপনি দু'বার মেমরি বরাদ্দ করবেন না। এমনকি তালিকা কনস্ট্রাক্টর এটির অনুলিপি করার জন্য অ্যারের মাধ্যমে লুপ করতে হবে; এমনকি এটি আগাম জানে না যে ভিতরে কেবল নাল উপাদান রয়েছে।

1. - বরাদ্দ এন - লুপ এন ব্যয়: 1 * বরাদ্দ (এন) + এন * লুপ_এটারেশন

২ - এন বরাদ্দ - এন + লুপ বরাদ্দ করুন () ব্যয়: 2 * বরাদ্দ (এন) + এন * লুপ_এটারেশন

তবে তালিকার বরাদ্দ একটি লুপগুলি দ্রুত হতে পারে যেহেতু তালিকাটি একটি অন্তর্নির্মিত শ্রেণি, তবে সি # হ'ল জিট-সংকলিত সুও ...

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