space関数 - c# 文字列 回数




C#で文字を繰り返す最善の方法 (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参照してください。

\tの文字列をC#で生成する最良の方法は何ですか?

私はC#を学んでいて、同じことを言うさまざまな方法で実験しています。

Tabs(uint t)は、 \tの量のstringを返す関数です

たとえば、 Tabs(3)"\t\t\t"返します"\t\t\t"

Tabs(uint numTabs)を実装するこれらの3つの方法のどれが最適ですか?

もちろん、それは「最良の」という意味に依存します。

  1. LINQのバージョンは2行だけでいいですね。 しかし、不必要に時間とリソースの消費を繰り返すと集約する呼び出しがありますか?

  2. StringBuilderバージョンは非常にはっきりしていますが、 StringBuilderクラスは何とか遅いですか?

  3. stringバージョンは基本的なものなので、わかりやすいです。

  4. それはまったく重要ではありませんか? 彼らはすべて平等ですか?

これらはすべて私がC#のためのより良い感じを得るのを助ける質問です。

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を使用する最初の例:

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));
}

あなたが '\ t' n回繰り返すことを望むとしましょう。

String.Empty.PadRight(n,'\t')

これはどうですか:

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

ここで、 nは文字列を繰り返したい回数です。

またはより良い:

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

これまでの提案とよく似ていますが、私はそれを単純にしておき、次のように適用したいと思います:

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

標準.Net本当に、


これを試して:

  1. Microsoft.VisualBasicリファレンスを追加
  2. 使用:ストリングresult = Microsoft.VisualBasic.Strings.StrDup(5、 "hi");
  3. それがあなたのために働くかどうか私に教えてください。

受け入れられる答えは、単一の文字を繰り返す最善の方法です。

Binoj Anthonyの答えは、文字列を繰り返す簡単で効率的な方法です。

しかし、もう少しコードを気にしない場合は、配列の埋め込みテクニックを使用して、これらの文字列を効率的に効率的に作成することができます。 私の比較テストでは、以下のコードがStringBuilder.Insertコードの約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);
}

この配列の塗りつぶし手法の詳細については、配列に単一の値を入力する最速の方法を参照してください。


拡張メソッドを作成することができます

static class MyExtensions
{
    internal static string Repeat(this char c, int n)
    {
        return new string(c, n);
    }
}

次に、このように使用できます

Console.WriteLine('\t'.Repeat(10));

拡張メソッド:

public static string Repeat(this string s, int n)
{
    return new String(Enumerable.Range(0, n).SelectMany(x => s).ToArray());
}

public static string Repeat(this char c, int n)
{
    return new String(c, n);
}

最高のバージョンは確かに組み込みの方法を使用することです:

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

他のソリューションの中で最も簡単なものを選んでください。 これが遅すぎることが判明している場合にのみ、より効率的な解決策に努めます。

StringBuilderを使用してその結果の長さを事前に知っている場合は、適切なコンストラクタも使用してください。これは、時間のかかる割り当てが1回だけで、データの不要なコピーがないので、はるかに効率的です。 ナンセンス:もちろん、上記のコードはより効率的です。


私はこの質問がすでに5年あることを知っていますが、.Net 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(',');

返品

{"Hello"、 "Hello"、 "Hello"、 ""}

複雑にしないでおく。


答えは本当に複雑さに依存します。 たとえば、縦棒ですべてのインデントをアウトライン化したいので、インデント文字列は次のように決定されます。

return new string(Enumerable.Range(0, indentSize*indent).Select(
  n => n%4 == 0 ? '|' : ' ').ToArray());

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






string