c# - সি#একটি অক্ষর পুনরাবৃত্তি করার সেরা উপায়




.net string (13)

.NET এর সমস্ত সংস্করণে, আপনি এইভাবে একটি স্ট্রিং পুনরাবৃত্তি করতে পারেন:

public static string Repeat(string value, int count)
{
    return new StringBuilder(value.Length * count).Insert(0, value, count).ToString();
}

একটি অক্ষর পুনরাবৃত্তি করতে, new String('\t', count) আপনার সেরা বিজি। share দেখুন।

সি # একটি স্ট্রিং উৎপন্ন করার সেরা উপায় এটি কি #

আমি সি # শিখছি এবং একই কথা বলার বিভিন্ন উপায়ে পরীক্ষা করছি।

Tabs(uint t) একটি ফাংশন যা t \t এর সাথে একটি string প্রদান করে

উদাহরণস্বরূপ Tabs(3) "\t\t\t"

Tabs(uint numTabs) প্রয়োগ করার এই তিনটি উপায়ে কোনটি সর্বোত্তম?

অবশ্যই যে "সেরা" অর্থ উপর নির্ভর করে।

  1. LINQ সংস্করণ শুধুমাত্র দুটি লাইন, যা সুন্দর। কিন্তু অপ্রয়োজনীয় সময় / সম্পদ ভোজন পুনরাবৃত্তি এবং সমষ্টি কল?

  2. StringBuilder সংস্করণটি খুব স্পষ্ট কিন্তু StringBuilder ক্লাসটি কোনভাবেই ধীর?

  3. string সংস্করণ মৌলিক, যার মানে বোঝা সহজ।

  4. এটা সব ব্যাপার না? তারা কি সবাই সমান?

এই সব প্রশ্নগুলি আমাকে সি # এর জন্য আরও ভাল বোধ করতে সহায়তা করে।

private string Tabs(uint numTabs)
{
    IEnumerable<string> tabs = Enumerable.Repeat("\t", (int) numTabs);
    return (numTabs > 0) ? tabs.Aggregate((sum, next) => sum + next) : ""; 
}  

private string Tabs(uint numTabs)
{
    StringBuilder sb = new StringBuilder();
    for (uint i = 0; i < numTabs; i++)
        sb.Append("\t");

    return sb.ToString();
}  

private string Tabs(uint numTabs)
{
    string output = "";
    for (uint i = 0; i < numTabs; i++)
    {
        output += '\t';
    }
    return output; 
}

আপনার প্রথম উদাহরণ যা Enumerable.Repeat ব্যবহার করে। Enumerable.Repeat :

private string Tabs(uint numTabs)
{
    IEnumerable<string> tabs = Enumerable.Repeat(
                                 "\t", (int) numTabs);
    return (numTabs > 0) ? 
            tabs.Aggregate((sum, next) => sum + next) : ""; 
} 

String.Concat সঙ্গে আরো কম্প্যাক্টভাবে পুনরায় লেখা যেতে পারে:

private string Tabs(uint numTabs)
{       
    return String.Concat(Enumerable.Repeat("\t", (int) numTabs));
}

আমার জন্য জরিমানা

public static class Utils
{
    public static string LeftZerosFormatter(int zeros, int val)
    {
        string valstr = val.ToString();

        valstr = new string('0', zeros) + valstr;

        return valstr.Substring(valstr.Length - zeros, zeros);
    }
}

আমি জানি যে এই প্রশ্নটি ইতিমধ্যে পাঁচ বছর বয়সী কিন্তু একটি স্ট্রিং পুনরাবৃত্তি করার একটি সহজ উপায় যা এমনকি নেট 2.0 এ কাজ করে।

একটি স্ট্রিং পুনরাবৃত্তি করতে:

string repeated = new String('+', 3).Replace("+", "Hello, ");

রিটার্নস

"হ্যালো, হ্যালো, হ্যালো,"

একটি অ্যারের হিসাবে একটি স্ট্রিং পুনরাবৃত্তি করতে:

// Two line version.
string repeated = new String('+', 3).Replace("+", "Hello,");
string[] repeatedArray = repeated.Split(',');

// One line version.
string[] repeatedArray = new String('+', 3).Replace("+", "Hello,").Split(',');

রিটার্নস

{"হ্যালো", "হ্যালো", "হ্যালো", ""}

সহজবোধ্য রাখো.


এই সম্পর্কে কি:

string tabs = new String('\t', n);

যেখানে n আপনি স্ট্রিং পুনরাবৃত্তি করতে চান বার সংখ্যা।

অথবা ভাল:

static string Tabs(int n)
{
    return new String('\t', n);
}

এক্সটেনশন পদ্ধতি ব্যবহার সম্পর্কে কি?

public static class StringExtensions
{
   public static string Repeat(this char chatToRepeat, int repeat) {

       return new string(chatToRepeat,repeat);
   }
   public  static string Repeat(this string stringToRepeat,int repeat)
   {
       var builder = new StringBuilder(repeat*stringToRepeat.Length);
       for (int i = 0; i < repeat; i++) {
           builder.Append(stringToRepeat);
       }
       return builder.ToString();
   }
}

তারপর আপনি লিখতে পারেন:

Debug.WriteLine('-'.Repeat(100)); // For Chars  
Debug.WriteLine("Hello".Repeat(100)); // For Strings

স্ট্রিংয়ের পরিবর্তে সহজ অক্ষরগুলির জন্য স্ট্রিংবিল্ডার সংস্করণটি ব্যবহার করার একটি কর্মক্ষমতা পরীক্ষা আপনাকে একটি প্রধান প্রফর্মেন্স পেনাল্টিটি দেয়: আমার কম্পিউটারে মিউচারযুক্ত পারফরম্যান্সের পার্থক্য 1:20 এর মধ্যে: Debug.WriteLine ('-' পুনরাবৃত্তি (1000000)) // গৃহস্থালি সংস্করণ এবং
Debug.WriteLine ("-"। পুনরাবৃত্তি (1000000)) // স্ট্রিং সংস্করণ


এটা চেষ্টা কর:

  1. মাইক্রোসফ্ট যোগ করুন। ভিসুয়াল বেসিক রেফারেন্স
  2. ব্যবহার করুন: স্ট্রিং ফলাফল = মাইক্রোসফ্ট। ভিসুয়ালবাসিক। স্ট্রিংস। ট্রার্টআপ (5, "হাই");
  3. যদি তোমার জন্য এটি কাজ করে, তাহলে আমাকে জানাও.

এবং এখনো অন্য পদ্ধতি

new System.Text.StringBuilder().Append('\t', 100).ToString()

কোন সন্দেহ ছাড়াই গৃহীত উত্তরটি একটি অক্ষর পুনরাবৃত্তি করার সর্বোত্তম এবং দ্রুততম উপায়।

Binoj Anthony এর উত্তর একটি স্ট্রিং পুনরাবৃত্তি একটি সহজ এবং বেশ কার্যকর উপায়।

তবে, যদি আপনি একটু বেশি কোড মনে করেন না তবে দক্ষতার সাথে এই স্ট্রিংগুলি আরও দ্রুত তৈরি করতে আপনি আমার অ্যারে ফিল প্রযুক্তিটি ব্যবহার করতে পারেন। আমার তুলনামূলক পরীক্ষায়, নীচের কোডটি স্ট্রিংবিল্ডারের 35% সময় নিখরচায়। কোডটি প্রবেশ করান।

public static string Repeat(this string value, int count)
{
    var values = new char[count * value.Length];
    values.Fill(value.ToCharArray());
    return new string(values);
}

public static void Fill<T>(this T[] destinationArray, params T[] value)
{
    if (destinationArray == null)
    {
        throw new ArgumentNullException("destinationArray");
    }

    if (value.Length > destinationArray.Length)
    {
        throw new ArgumentException("Length of value array must not be more than length of destination");
    }

    // set the initial array value
    Array.Copy(value, destinationArray, value.Length);

    int copyLength, nextCopyLength;

    for (copyLength = value.Length; (nextCopyLength = copyLength << 1) < destinationArray.Length; copyLength = nextCopyLength)
    {
        Array.Copy(destinationArray, 0, destinationArray, copyLength, copyLength);
    }

    Array.Copy(destinationArray, 0, destinationArray, copyLength, destinationArray.Length - copyLength);
}

এই অ্যারের কৌশলটি পূরণ করার জন্য, একটি একক মান সহ একটি অ্যারে পূরণ করার দ্রুততম উপায় দেখুন


পূর্ববর্তী পরামর্শের অনুরূপ যদিও, আমি এটি সহজ রাখতে এবং নিম্নলিখিতটি প্রয়োগ করতে চাই:

string MyFancyString = "*";
int strLength = 50;
System.Console.WriteLine(MyFancyString.PadRight(strLength, "*");

স্ট্যান্ডার্ড নেট। সত্যিই,


সেরা সংস্করণ অবশ্যই অন্তর্নির্মিত ভাবে ব্যবহার করতে হবে:

string Tabs(int len) { return new string('\t', len); }

অন্যান্য সমাধান, সবচেয়ে সহজ পছন্দ; এটি খুব ধীরে ধীরে প্রমাণিত হয় তবে, আরও দক্ষ সমাধানটির জন্য সংগ্রাম করুন।

আপনি যদি StringBuilder ব্যবহার StringBuilder এবং এর ফলে দৈর্ঘ্যটি আগে থেকেই জানেন তবে একটি উপযুক্ত কন্সট্রাকটরটি ব্যবহার করুন, এটি আরও বেশি কার্যকরী কারণ এটি শুধুমাত্র এক সময় গ্রহণযোগ্য বরাদ্দ ঘটে এবং ডেটা অপ্রয়োজনীয় অনুলিপি করা হয়। ননসেন্স: অবশ্যই উপরে কোড আরও দক্ষ।


String.Concat ব্যবহার করে। String.Concat এবং Enumerable.Repeat যা String.Join ব্যবহার করার চেয়ে কম ব্যয়বহুল। String.Join

public static Repeat(this String pattern, int count)
{
    return String.Concat(Enumerable.Repeat(pattern, count));
}

var str = new string(Enumerable.Repeat('\t', numTabs).ToArray());




string