এক্স স্ট্রিংটি বারবার পুনরাবৃত্তি করার কোনও সহজ উপায় আছে?


318

আমি কোনও আইটেমের গভীরতার উপর ভিত্তি করে স্ট্রিংয়ের আগে একটি নির্দিষ্ট সংখ্যক ইনডেন্টেশন sertোকানোর চেষ্টা করছি এবং আমি ভাবছি যে এক্স স্ট্রিংটি পুনরাবৃত্তি করার কোনও উপায় আছে কিনা X উদাহরণ:

string indent = "---";
Console.WriteLine(indent.Repeat(0)); //would print nothing.
Console.WriteLine(indent.Repeat(1)); //would print "---".
Console.WriteLine(indent.Repeat(2)); //would print "------".
Console.WriteLine(indent.Repeat(3)); //would print "---------".

9
এটি প্রযোজ্য কিনা তা নিশ্চিত না, তবে আপনি ইন্ডেন্টটেক্সট রাইটারটিও দেখতে চাইতে পারেন ।
ক্রিস

আপনি কি গ্রহণযোগ্য উত্তরটি পরিবর্তন হিসাবে বিবেচনা করতে চান কারণ আপনার প্রশ্নটি স্ট্রিংগুলির পুনরাবৃত্তি সম্পর্কিত এবং স্বীকৃত উত্তরটি চিত্রিত করে এমন অক্ষর নয়? আজ অবধি নেট নেট .7..7.,, Stringবর্গের কোনও ওভারলোডেড কনস্ট্রাক্টর প্যারামিটার হিসাবে স্ট্রিং গ্রহণ করছে না এটি থেকে পুনরাবৃত্তি তৈরি করা যা গ্রহণযোগ্য উত্তরটিকে নিখুঁত ফিট করে তুলতে পারে।
আরবিটি

উত্তর:


537

যদি আপনি কেবল একই চরিত্রটির পুনরাবৃত্তি করতে চান তবে আপনি স্ট্রিং কনস্ট্রাক্টর ব্যবহার করতে পারেন যা একটি চর গ্রহণ করে এবং এটির পুনরাবৃত্তি করতে বারের সংখ্যাটি গ্রহণ করে new String(char c, int count)

উদাহরণস্বরূপ, পাঁচবার একটি ড্যাশ পুনরাবৃত্তি করতে:

string result = new String('-', 5);
Output: -----

7
এই সুন্দর সামান্য বৈশিষ্ট্য সম্পর্কে আমাকে মনে করিয়ে দেওয়ার জন্য ধন্যবাদ। আমি মনে করি এটি আমার মনের কোণে হারিয়ে গেছে।
ক্রিস

3
যেহেতু ট্যাব মেটাচার্যাক্টর '\ t' একটি চর এটি এটি ইনডেন্টেশনের জন্যও কাজ করে।
করি

91
এটি সি # এর একটি খুব দরকারী কৌশল, তবে প্রশ্নের শিরোনাম একটি স্ট্রিং (কোনও চর নয়) সম্পর্কে জিজ্ঞাসা করছে। এই নীচের অন্য উত্তরগুলি আসলে প্রশ্নের উত্তর দিচ্ছে, তবে অনেক নিচে রেট দেওয়া হয়েছে। আমি আহমদের জবাবকে অসম্মান করার চেষ্টা করছি না, তবে আমি মনে করি যেহেতু এই প্রশ্নের শিরোনামটি পরিবর্তন করা উচিত (যদি প্রশ্নটি আসলে চরিত্রগুলির সাথে সম্পর্কিত হয়) বা অন্য উত্তরগুলি সত্যই আপলোড করা উচিত (এবং এটি উত্তর নয়)।
pghprogrammer4

14
@ আহমাদ যেমনটি বলেছিলাম, আমি নিম্নোক্ত হইনি কারণ আমি মনে করি না আপনি ভাল তথ্য সরবরাহ করেছেন, তবে আপনি যে তথ্য সরবরাহ করেছেন তা বর্তমানে জবাব হিসাবে প্রশ্নের উত্তর দেওয়ার জন্য প্রাসঙ্গিক নয় । কল্পনা করুন আপনি যদি স্ট্রিংগুলির পুনরাবৃত্তি করার কোনও উপায় অনুসন্ধান করছেন (অক্ষর নয়) এবং আপনি যখন প্রাসঙ্গিক প্রশ্নটি পান তখন আপনাকে প্রশ্নের 'আসল উত্তরগুলি পেতে বেশ কয়েকটি' দরকারী 'টিপসগুলি দিয়ে স্ক্রোল করতে হয়। ডাউনভোটটি যদি আপনার কাছে অপরাধ হয় তবে আমি এটি সরাতে পারি। তবে আপনি দেখতে পাচ্ছেন আমি কোথা থেকে আসছি? আমি কি এখানে পুরোপুরি অফ-বেস?
pghprogrammer4

11
@ pgprogrammer4 আইএমএইচও, ডাউনভোটগুলি বেশ নিরুৎসাহজনক হতে পারে এবং এটি কেবল ক্ষতিকারক / বিভ্রান্তিকর / সত্যিকারের উত্তরগুলির জন্য ব্যবহার করা উচিত, এটির জন্য একটি বড় পরিবর্তন দরকার বা তাদের লেখক মুছে ফেলা উচিত। উত্তরগুলি উপস্থিত রয়েছে কারণ লোকেরা উদার এবং তারা যা জানে তা ভাগ করে নিতে চায়। সাধারণত, এই সাইটগুলি শীর্ষে দরকারী উত্তর আনতে আপভোটকে উত্সাহিত করে।
টুলমেকারস্টেভ

271

আপনি নেট নেট ব্যবহার করছেন 4.0, আপনি string.Concatএকসাথে ব্যবহার করতে পারে Enumerable.Repeat

int N = 5; // or whatever
Console.WriteLine(string.Concat(Enumerable.Repeat(indent, N)));

অন্যথায় আমি আদমের উত্তর মত কিছু নিয়ে যেতে হবে ।

আমি সাধারণত অ্যান্ডির উত্তরটি ব্যবহার করার পরামর্শ না দেওয়ার কারণটি হ'ল কলটি অতিমাত্রায় ওভারহেডের পরিচয় দেয় যা অ্যাডামের প্রস্তাবিত পদ্ধতির সাথে এড়ানো যায় । এটি বলেছে, অন্তত এটি। নেট 4.0 এর প্রয়োজন ছাড়াই কাজ করে; এবং এটি দ্রুত এবং সহজ (দক্ষতা খুব একটা উদ্বেগের বিষয় না হলে এবং আপনাকে মেরে ফেলবে না)।ToArray()StringBuilder


3
এটি স্ট্রিংগুলির সাথে দুর্দান্তভাবে কাজ করবে - যেমন আপনার যদি অ-ব্রেকিং স্পেসগুলি (& nbsp;) সংগ্রহ করতে হয়। তবে আমি ধরে নিয়েছি স্ট্রিং কনস্ট্রাক্টর সবচেয়ে দ্রুত হবে যদি আপনি কোনও চর নিয়ে কাজ করছেন ...
কাঠবেজ

1
স্ট্রিং কনস্ট্রাক্টর কেবল একটি চরের জন্য কাজ করবে। কনক্যাট পুনরাবৃত্তি ব্যবহারের বিকল্পগুলির জন্য স্ট্রিংয়ের কাজ করবে
এলি দাগান

4
প্রকৃত শিরোনাম প্রশ্নের উত্তর দেওয়ার জন্য ধন্যবাদ!
কে কে কোয়ান

আমি এই উত্তর পছন্দ!
জি_আই_কোডিং

যদি আপনি আউটপুট হিসাবে সিস্টেমে.লিনক.অনুসংখ্যক ইত্যাদি পেয়ে থাকেন তবে এর কারণ আপনি (ঠিক আছে, এটি আমি ছিল) স্নিপেটটি অনুলিপি / পেস্ট এবং সংশোধন করতে খুব দ্রুত ছিল। আপনার যদি এনুমারবেল্টের আউটপুটটিতে একটি ভিন্ন স্ট্রিং সংকোচনের প্রয়োজন হয় ep পুনরাবৃত্তি, আপনার এটি এটি করা দরকার: Console.WriteLine(string.Concat("-", string.Concat(Enumerable.Repeat(indent, N))));
গাব

47
public static class StringExtensions
{
    public static string Repeat(this string input, int count)
    {
        if (!string.IsNullOrEmpty(input))
        {
            StringBuilder builder = new StringBuilder(input.Length * count);

            for(int i = 0; i < count; i++) builder.Append(input);

            return builder.ToString();
        }

        return string.Empty;
    }
}

6
কন্সট্রাক্টরের input.Length * countকাছে যেতে পারে StringBuilder, আপনি কি ভাবেন না?
ড্যান তাও

এবং আপনি যদি কনস্ট্রাক্টরের input.Length * countকাছে যান তবে আপনি পুরোপুরি StringBuilderএড়িয়ে যেতে এবং ঠিক StringBuilderএখনই সঠিক আকারের একটি চর [] তৈরি করতে পারেন।
dtb

@ ডিটিবি: আপনি কেন এটি করতে চান তা আমি আগ্রহী। আমি ভাবতে পারি না যে এটি ব্যবহারের চেয়ে বেশি (যদি থাকে) দ্রুত StringBuilderহবে এবং কোডটি স্বচ্ছ হবে।
অ্যাডাম রবিনসন

@ ডিটিবি: ইয়াক স্ট্রিংবিল্ডার ব্যবহার করুন; এটি দক্ষতার সাথে এটি করার জন্য ডিজাইন করা হয়েছিল।
নির্মাতা স্টিভ

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

46

স্ট্রিং জন্য সর্বাধিক পারফরম্যান্ট সমাধান

string result = new StringBuilder().Insert(0, "---", 5).ToString();

1
অবশ্যই একটি সুন্দর ও লাইনার সর্বাধিক অভিনয় না নিশ্চিত। স্ট্রিংবিল্ডারের খুব কম সংখ্যক কনটনেটেশনের উপরে কিছুটা ওভারহেড রয়েছে।
তিজয় 10

25

অনেক পরিস্থিতিতে, এটি সম্ভবত সবচেয়ে নিকৃষ্ট সমাধান:

public static class StringExtensions
{
    public static string Repeat(this string s, int n)
        => new StringBuilder(s.Length * n).Insert(0, s, n).ToString();
}

ব্যবহারটি তখন:

text = "Hello World! ".Repeat(5);

এটি অন্যান্য উত্তরগুলিতে তৈরি হয় (বিশেষত @ c0rd এর)। সরলতার পাশাপাশি, এর নিম্নলিখিত বৈশিষ্ট্য রয়েছে, যা অন্যান্য সমস্ত কৌশল ভাগ করে নেওয়ার ক্ষেত্রে আলোচনা করে না:

  • কোনও দৈর্ঘ্যের একটি স্ট্রিংয়ের পুনরাবৃত্তি, কেবল একটি অক্ষর নয় (ওপি দ্বারা অনুরোধ করা হয়েছে)।
  • StringBuilderস্টোরেজ preallocation মাধ্যমে কার্যকর ব্যবহার ।

আমি সম্মত, এটা দুর্দান্ত। আমি কেবল ববকে Bobণ দিয়ে আমার কোডে এটি যুক্ত করেছি! ধন্যবাদ!
জন বার্লি

22

ব্যবহার আপনার পছন্দসই স্ট্রিংয়ে যদি কেবল একটি একক চর থাকে তবে স্ট্রিং.প্যাডফেল্ট

public static string Indent(int count, char pad)
{
    return String.Empty.PadLeft(count, pad);
}

এখানে Creditণ


1
চুমু খেতে হবে। যাইহোক, আমাদের স্ট্রিংবিল্ডার এবং এক্সটেনশনগুলির কী দরকার? এটি খুব সাধারণ সমস্যা।
ডেকে

1
আমি জানি, এটি কিছু কমনীয়তার সাথে বর্ণিত হিসাবে সমস্যার সমাধান বলে মনে হচ্ছে। এবং বিটিডব্লিউ, আপনি কে 'এস' ডাকছেন? :-)
স্টিভ টাউনসেন্ড

7
কিন্তু এই সত্যিই শুধু কম আবশ্যিক সংস্করণ নয় কন্সট্রাকটর করে একটি সময় লাগে এবং একটি ? stringcharint
ড্যান তাও

এটি স্ট্রিংয়ের সাথে আরও ভাল লাগবে "" ... এর পরিবর্তে এমপিটি ... অন্যথায়, ভাল সমাধান;)
টমাস লেভসেক

@ স্টিভ বিটিডাব্লু String.PadLeftযুক্তিগুলি বিপরীত হয়েছে। countপ্যাডিং চরিত্র সামনে আসে।
আহমাদ

17

আপনি আপনার স্ট্রিংটির পুনরাবৃত্তি করতে পারেন (এটি যদি একক চর নয়) এবং ফলাফলটি এইভাবে পছন্দ করতে পারেন:

String.Concat(Enumerable.Repeat("---", 5))

12

আমি ড্যান তাওর উত্তরের জন্য যাব, তবে আপনি। নেট 4.0 ব্যবহার না করে আপনি এর মতো কিছু করতে পারেন:

public static string Repeat(this string str, int count)
{
    return Enumerable.Repeat(str, count)
                     .Aggregate(
                        new StringBuilder(),
                        (sb, s) => sb.Append(s))
                     .ToString();
}

3
যদি আমি এই প্রকল্পে এই স্নিপেটটি খুঁজে পাই, আমি ভাবব কে কেএসএস লঙ্ঘন করছে এবং কেন ... অন্যথায় চমৎকার
নোকটিস

4
        string indent = "---";
        string n = string.Concat(Enumerable.Repeat(indent, 1).ToArray());
        string n = string.Concat(Enumerable.Repeat(indent, 2).ToArray());
        string n = string.Concat(Enumerable.Repeat(indent, 3).ToArray());

1
@ অ্যাডাম: আমি অনুমান করি যে আপনার প্রাক-নেট 4.0 করা উচিত।
ড্যান তাও

3

আমি দেওয়া উত্তর পছন্দ। একই লাইনের পাশাপাশি যদিও আমি অতীতে ব্যবহার করেছি:

"" .PadLeft (3 * ইন্ডেন্ট, '-')

এটি একটি ইনডেন্ট তৈরি করা পূরণ করবে তবে প্রযুক্তিগতভাবে প্রশ্নটি ছিল একটি স্ট্রিং পুনরাবৃত্তি করা। স্ট্রিং ইনডেন্ট যদি> - <এর মতো কিছু হয় তবে এটির পাশাপাশি গৃহীত উত্তরটি কাজ করবে না। এক্ষেত্রে স্ট্রিংবিল্ডার ব্যবহার করে সি0rd এর সমাধানটি দেখতে ভাল লাগছে, যদিও স্ট্রিংবিল্ডারের ওভারহেড বাস্তবে এটি সর্বাধিক পারফর্ম্যান্ট করে না। একটি বিকল্প হ'ল স্ট্রিংগুলির একটি অ্যারে তৈরি করা, এটি ইনডেন্ট স্ট্রিং দিয়ে পূরণ করুন, তারপরে এটি কনক্যাট করুন। ঝকঝকে:

int Indent = 2;

string[] sarray = new string[6];  //assuming max of 6 levels of indent, 0 based

for (int iter = 0; iter < 6; iter++)
{
    //using c0rd's stringbuilder concept, insert ABC as the indent characters to demonstrate any string can be used
    sarray[iter] = new StringBuilder().Insert(0, "ABC", iter).ToString();
}

Console.WriteLine(sarray[Indent] +"blah");  //now pretend to output some indented line

আমরা সকলেই একটি চতুর সমাধান পছন্দ করি তবে কখনও কখনও সহজ হয় সেরা।


3

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

public static string Repeat(this string text, int count)
{
    if (!String.IsNullOrEmpty(text))
    {
        return String.Concat(Enumerable.Repeat(text, count));
    }
    return "";
}

আশা করি কেউ এটি ব্যবহার করতে পারবেন ...


2

অবাক হয়ে কেউ পুরানো-স্কুলে যায়নি। আমি এই কোড সম্পর্কে কোনও দাবি করছি না , তবে কেবল মজাদার জন্য:

public static string Repeat(this string @this, int count)
{
    var dest = new char[@this.Length * count];
    for (int i = 0; i < dest.Length; i += 1)
    {
        dest[i] = @this[i % @this.Length];
    }
    return new string(dest);
}

স্পষ্টতই আমি এটিকে তুষ্ট পাঠকের পরীক্ষার জন্য রেখে দিয়েছিলাম :) খুব চমত্কার, ধন্যবাদ।
ওল্ডুয়ানস্টেভ

1
@ এই প্যারামিটারটির নামকরণ সম্পর্কে পুরানো স্কুল নেই, এটি সবসময়ই একটি ভয়ঙ্কর ধারণা ছিল :)
ডেভ জেলিসন

2
আমি বাধ্য না হলে (যেমন @ ক্লাস = "কিছু" এমভিসির সাথে কাজ করার সময় কীওয়ার্ডটি পরিবর্তনশীল নাম হিসাবে ব্যবহার না করা পছন্দ করি কারণ আপনার সিএসএসে রেফারিং ক্লাস প্রয়োজন তবে এটি সি # তে অবশ্যই একটি কীওয়ার্ড) অবশ্যই এটি কথা বলছি না, এটি থাম্বের একটি সাধারণ নিয়ম। যদিও এটি অবশ্যই সংকলনযোগ্য কোড এবং বৈধ, তবে উভয় ব্যবহারিক কারণের পাশাপাশি পড়া এবং টাইপিংয়ের স্বাচ্ছন্দ্য সম্পর্কে ভাবুন I'm আমি প্রথমে যা ঘটছে তা বর্ণনা করার জন্য প্যারামিটারের নাম ব্যবহার করার ক্ষেত্রে আমি খুব আংশিক তাই পুনরাবৃত্তি করুন (এই স্ট্রিং বীজ,
পূর্ববর্তী

1
আকর্ষণীয়, ধন্যবাদ। আমি মনে করি এই ক্ষেত্রে আপনি সম্ভবত ঠিক বলেছেন যে @ এটি এর চেয়ে কম বর্ণনামূলক। তবে সাধারণভাবে আমি মনে করি এটি ক্লাস বা ইন্টারফেসগুলি প্রসারিত করা বেশ সাধারণ যেখানে 'এটি' এর একমাত্র যুক্তিসঙ্গত নাম বরং জেনারিক। আপনার যদি 'দৃষ্টান্ত' বা 'এটি' বা 'টিআর' ( এমএসডিএন দেখুন ) নামে একটি প্যারামিটার থাকে তবে আপনি সম্ভবত যা বোঝাতে চেয়েছিলেন তা হ'ল এটি '।
ওল্ডুয়ানস্টেভ

1
আমি মূলত আপনার সাথে একমত, কিন্তু তর্ক করার জন্য ... যেহেতু আমি যে স্ট্রিংটি তৈরি করছি তার সম্পর্কে আমি আরও জানি আমি স্ট্রিংবিল্ডারের চেয়ে কিছুটা ভাল কাজ করতে পারি। স্ট্রিংবিল্ডার যখন মেমরি বরাদ্দ করে তখন একটি অনুমান করতে হয়। মঞ্জুর যে এটি অনেক পরিস্থিতিতে
তাত্পর্যপূর্ণ

2

এটি কীভাবে সম্পাদন করবে তা নিশ্চিত নয় তবে এটি কোডের একটি সহজ টুকরো। (আমি সম্ভবত এটি এটিকে আরও জটিল করে দেখিয়েছি))

int indentCount = 3;
string indent = "---";
string stringToBeIndented = "Blah";
// Need dummy char NOT in stringToBeIndented - vertical tab, anyone?
char dummy = '\v';
stringToBeIndented.PadLeft(stringToBeIndented.Length + indentCount, dummy).Replace(dummy.ToString(), indent);

বিকল্পভাবে, আপনি যদি সর্বাধিক সংখ্যার স্তরের প্রত্যাশা করতে পারেন তবে আপনি কেবল এটিতে একটি অ্যারে এবং সূচি ঘোষণা করতে পারেন। আপনি সম্ভবত এই অ্যারে স্থির বা একটি ধ্রুবক করতে চান।

string[] indents = new string[4] { "", indent, indent.Replace("-", "--"), indent.Replace("-", "---"), indent.Replace("-", "----") };
output = indents[indentCount] + stringToBeIndented;      

2

অ্যাডামের উত্তরের বিষয়ে মন্তব্য করার মতো পর্যাপ্ত পরিমাণ আমার কাছে নেই তবে এটি ইমো করার সর্বোত্তম উপায়টি হ'ল:

public static string RepeatString(string content, int numTimes) {
        if(!string.IsNullOrEmpty(content) && numTimes > 0) {
            StringBuilder builder = new StringBuilder(content.Length * numTimes);

            for(int i = 0; i < numTimes; i++) builder.Append(content);

            return builder.ToString();
        }

        return string.Empty;
    }

আপনাকে অবশ্যই numTimes শূন্যের চেয়ে বড় কিনা তা পরীক্ষা করে দেখতে হবে, অন্যথায় আপনি একটি ব্যতিক্রম পাবেন।


2

আমি এই সমাধানটি দেখতে পেলাম না। আমি বর্তমানে সফ্টওয়্যার বিকাশে যেখানে আছি তার জন্য এটি সহজ বলে মনে করি:

public static void PrintFigure(int shapeSize)
{
    string figure = "\\/";
    for (int loopTwo = 1; loopTwo <= shapeSize - 1; loopTwo++)
    {
        Console.Write($"{figure}");
    }
}

2

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

তবে, খুব বড় সংখ্যক পুনরাবৃত্তি, বা যেখানে উচ্চ স্তরের দক্ষতা এটি থেকে ছিটানো উচিত, সেখানে স্ট্রিংবিল্ডারের মৌলিক কার্যকারিতার অনুরূপ কিছু করার জন্য তবে মূল স্ট্রিংয়ের পরিবর্তে গন্তব্য থেকে অতিরিক্ত অনুলিপি তৈরি করা আরও ভাল পদ্ধতির, নীচের হিসাবে.

    public static string Repeat_CharArray_LogN(this string str, int times)
    {
        int limit = (int)Math.Log(times, 2);
        char[] buffer = new char[str.Length * times];
        int width = str.Length;
        Array.Copy(str.ToCharArray(), buffer, width);

        for (int index = 0; index < limit; index++)
        {
            Array.Copy(buffer, 0, buffer, width, width);
            width *= 2;
        }
        Array.Copy(buffer, 0, buffer, width, str.Length * times - width);

        return new string(buffer);
    }

এটি প্রতিটি পুনরাবৃত্তির সাথে উত্স / গন্তব্য স্ট্রিংয়ের দৈর্ঘ্য দ্বিগুণ করে, যা প্রতিবার রিসেট কাউন্টারগুলির ওভারহেড সংরক্ষণ করে এটি প্রতিটি স্ট্রিংয়ের মধ্য দিয়ে যায়, পরিবর্তে সহজেই এখন দীর্ঘতর স্ট্রিংটি পড়ে এবং অনুলিপি করে যা আধুনিক প্রসেসরগুলি অনেক কিছু করতে পারে আরও দক্ষতার সাথে।

স্ট্রিংয়ের দৈর্ঘ্য দ্বিগুণ করার জন্য কতবার এটি প্রয়োজন তা খুঁজে পেতে এটি বেস -২ লোগারিদম ব্যবহার করে এবং এরপরে বহুবার তা চালিয়ে যায়। যেহেতু অনুলিপি করা বাকীটি এখন সেটির অনুলিপি করা মোট দৈর্ঘ্যের তুলনায় কম, সুতরাং এটি ইতিমধ্যে যা তৈরি করেছে তার একটি উপসেট অনুলিপি করতে পারে।

স্ট্রিংবিল্ডারের ব্যবহারের উপর আমি অ্যারে.কপি () পদ্ধতিটি ব্যবহার করেছি, স্ট্রিংবিল্ডারের সামগ্রীটি নিজেই অনুলিপি করার সাথে প্রতিটি পুনরাবৃত্তির সাথে সেই সামগ্রীর সাথে একটি নতুন স্ট্রিং উত্পাদন করার ওভারহেড থাকবে। অ্যারে.কপি () এটিকে এড়িয়ে চলে, যখন এখনও অত্যন্ত উচ্চ দক্ষতার সাথে কাজ করে।

এই সমাধানটি ও (1 + লগ এন) পুনরাবৃত্তিগুলি সম্পূর্ণ করতে লাগে , এমন একটি হার যা পুনরাবৃত্তির সংখ্যার সাথে লগারিদমিকভাবে বৃদ্ধি পায় (পুনরাবৃত্তির সংখ্যা দ্বিগুণ করা একটি অতিরিক্ত পুনরাবৃত্তির সমান), অন্যান্য পদ্ধতির তুলনায় যথেষ্ট পরিমাণে সঞ্চয়, যা আনুপাতিকভাবে বৃদ্ধি পায়।


1

আর একটি পদ্ধতি হ'ল জেনেরিক এক্সটেনশন পদ্ধতি stringহিসাবে বিবেচনা করা IEnumerable<char>এবং তা হ'ল নির্দিষ্ট ফ্যাক্টর দ্বারা সংগ্রহের আইটেমগুলিকে গুণিত করবে।

public static IEnumerable<T> Repeat<T>(this IEnumerable<T> source, int times)
{
    source = source.ToArray();
    return Enumerable.Range(0, times).SelectMany(_ => source);
}

সুতরাং আপনার ক্ষেত্রে:

string indent = "---";
var f = string.Concat(indent.Repeat(0)); //.NET 4 required
//or
var g = new string(indent.Repeat(5).ToArray());

1

পুনরাবৃত্তি সহ একটি লাইন মুদ্রণ করুন।

Console.Write(new string('=', 30) + "\n");

==============================


আপনি স্ট্রিংয়ের শেষে \ n সংযোজন করার পরিবর্তে কনসোল.ওরাইটলাইন ব্যবহার করেননি কেন?
ইনজেকনিনজা

-1

আপনি এটি করতে এক্সটেনশনমিথড তৈরি করতে পারেন!

public static class StringExtension
{
  public static string Repeat(this string str, int count)
  {
    string ret = "";

    for (var x = 0; x < count; x++)
    {
      ret += str;
    }

    return ret;
  }
}

বা @ ডান টাও সমাধান ব্যবহার করে:

public static class StringExtension
{
  public static string Repeat(this string str, int count)
  {
    if (count == 0)
      return "";

    return string.Concat(Enumerable.Repeat(indent, N))
  }
}

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