string myString = "ABCDEFGHIJ";
string modifiedString = new StringBuilder(myString){[3]='Z', [4]='X'}.ToString();
আমাকে আমার সমাধানটি ব্যাখ্যা করতে দিন।
দুটি অক্ষর 'জেড' এবং 'এক্স' দিয়ে তার দুটি নির্দিষ্ট পজিশনে ("পজিশন 4 থেকে পজিশন 5") স্ট্রিং পরিবর্তন করার সমস্যার বিবৃতি দেওয়া হয়েছে এবং স্ট্রিং বদলে স্ট্রিং বদলানোর জন্য পজিশন সূচকটি ব্যবহার করতে জিজ্ঞাসা করুন ) পদ্ধতি (প্রকৃত স্ট্রিংয়ে কিছু চরিত্রের পুনরাবৃত্তি হওয়ার সম্ভাবনার কারণেই হতে পারে), আমি Substring()
স্ট্রিং Concat()
বা স্ট্রিং Remove()
এবং Insert()
পদ্ধতির ব্যবহারের চেয়ে লক্ষ্য অর্জনের জন্য ন্যূনতমবাদী পদ্ধতির ব্যবহার করতে পছন্দ করব । যদিও এই সমস্ত সমাধানগুলি একই লক্ষ্য অর্জনে উদ্দেশ্যটিকে পরিবেশন করবে, তবে এটি কেবলমাত্র ব্যক্তিগত পছন্দ এবং ন্যূনতম পদ্ধতির সাথে নিষ্পত্তির দর্শনের উপর নির্ভর করে।
আমার সমাধানটি ফিরে আসার জন্য উপরে উল্লেখ করা হয়েছে, যদি আমরা আরও ঘনিষ্ঠভাবে নজর রাখিstring
এবং এরStringBuilder
, উভয়ই অভ্যন্তরীণভাবে একটি প্রদত্ত স্ট্রিংকে অক্ষরের অ্যারে হিসাবে বিবেচনা করে। যদি আমরা এর বাস্তবায়নের দিকে লক্ষ্যStringBuilder
এটি internal char[] m_ChunkChars;
প্রদত্ত স্ট্রিং ক্যাপচার করার জন্য " " এর মতো অভ্যন্তরীণ কিছু পরিবর্তনশীল কিছু বজায় রাখে । এখন এটি যেহেতু অভ্যন্তরীণ পরিবর্তনশীল, তাই আমরা সরাসরি এটির অ্যাক্সেস করতে পারি না। বাহ্যিক বিশ্বের জন্য, অক্ষর অ্যারে অ্যাক্সেস করতে এবং পরিবর্তন করতে সক্ষম হতে, সূচক StringBuilder
সম্পত্তিগুলির মাধ্যমে তাদের প্রকাশ করে যা নীচের মতো দেখতে কিছু দেখায়
[IndexerName("Chars")]
public char this[int index]
{
get
{
StringBuilder stringBuilder = this;
do
{
// … some code
return stringBuilder.m_ChunkChars[index1];
// … some more code
}
}
set
{
StringBuilder stringBuilder = this;
do
{
//… some code
stringBuilder.m_ChunkChars[index1] = value;
return;
// …. Some more code
}
}
}
আমার সমাধান উপরে উল্লিখিত এই সূচকটির অভ্যন্তরীণ রক্ষণাবেক্ষণের অক্ষর অ্যারে যা আইএমও দক্ষ এবং নূন্যতমবাদী সরাসরি পরিবর্তন করতে সক্ষম করার ক্ষমতা অর্জন করে verage
BTW; আমরা উপরের সমাধানটি আরও বিস্তৃতভাবে নীচের মতো কিছু আবার লিখতে পারি
string myString = "ABCDEFGHIJ";
StringBuilder tempString = new StringBuilder(myString);
tempString[3] = 'Z';
tempString[4] = 'X';
string modifiedString = tempString.ToString();
এই প্রসঙ্গে এছাড়াও উল্লেখ করতে চাই যে string
এটির ক্ষেত্রে এর অভ্যন্তরীণ চরিত্রের অ্যারেটি উন্মোচনের উপায় হিসাবে সূচকের সম্পত্তিও রয়েছে, তবে এক্ষেত্রে এর কেবল গেটর সম্পত্তি (এবং কোনও সেটার নেই) হিসাবে স্ট্রিং প্রকৃতিতে স্থায়ী নয়। এবং সেই কারণেই আমাদের StringBuilder
চরিত্রের অ্যারে পরিবর্তন করতে হবে।
[IndexerName("Chars")]
public extern char this[int index] { [SecuritySafeCritical, __DynamicallyInvokable, MethodImpl(MethodImplOptions.InternalCall)] get; }
এবং সর্বশেষে তবে কমপক্ষে এই সমাধানটি এই নির্দিষ্ট সমস্যার ক্ষেত্রে কেবলমাত্র উপযুক্ত উপযুক্ত যেখানে জিজ্ঞাসাটি কেবলমাত্র কয়েকটি অবস্থানের একটি পরিচিত অবস্থান সূচক সম্মুখের সাথে প্রতিস্থাপন করবে। এটির জন্য উপযুক্ত উপযুক্ত হতে পারে না যখন প্রয়োজনীয়তাটি একটি দীর্ঘ দৈর্ঘ্যের স্ট্রিংকে পরিবর্তন করতে হয় অর্থাৎ অক্ষরগুলির সংখ্যা পরিবর্তনের জন্য সংখ্যায় বড় হয়।