5

私が調査していた単なる好奇心。

問題:文字列/文字をn回繰り返すだけです(掛け算、誰かが言うでしょう) 。この目的のためにEnumerable.Repeat
があることは知っていますが、それなしでこれをやろうとしていました。 この場合のLINQはかなり役に立たないようです 。

from X in "s" select X  

文字列「s」が調査されているため、 X はcharです。同じことが拡張メソッドにも当てはまります。たとえば、「s」です。集計(blablabla) は、文字列自体ではなく、文字 's' だけで再び機能します。文字列を繰り返すには「外部」が必要になるため、ラムダデリゲートを考えましたが、デリゲート/ラムダ式を割り当てる変数を宣言しないと実行できません。
関数を定義してインラインで呼び出すようなものです。

( (a)=>{return " "+a;} )("a");  

また

delegate(string a){return " "+a}(" ");  

「名前なし」エラーが発生し(したがって、パラメーターとして可能なラムダ/デリゲートを渡しても再帰、AFAIKはありません)、最終的には制限のためにC#で作成することさえできませんでした。 私はこのことを間違った視点から見ているのかもしれません。何か案は? これは単なる実験です。パフォーマンスやメモリの使用については気にしません...ただ、それが1行であり、一種の自律的であるということだけです。たぶん、Copy/CopyTo を使って何かをしたり、他のコレクションにキャストしたりすることができるかもしれませんが、わかりません。反省も受け付けます。

4

2 に答える 2

9

文字を n 回繰り返すには、使用せず、この文字列コンストラクターEnumerable.Repeatのみを使用します。

string str = new string('X', 10);

string.Join文字列を繰り返すには、 andを使用するよりも良い方法はありませんEnumerable.Repeat

string foo = "Foo";
string str = string.Join("", Enumerable.Repeat(foo, 10));

編集:string.Concatセパレーターが必要ない場合は、代わりに使用できます:

string str = string.Concat( Enumerable.Repeat(foo, 10) );
于 2012-12-13T16:50:02.087 に答える
2

文字ではなく文字列を繰り返したい場合、簡単な方法はStringBuilder.Insertメソッドを使用することです。これは、挿入インデックスと使用する繰り返し回数のカウントを取ります。

var sb = new StringBuilder();
sb.Insert(0, "hi!", 5);
Console.WriteLine(sb.ToString());

それ以外の場合、単一の文字を繰り返すには、同様の質問 hereのコメントで述べたように、文字列コンストラクターを使用します。例えば:

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

完全を期すために、文字を繰り返すことができるオーバーロードされたメソッドStringBuilderを提供することは注目に値しますが、文字列に対するそのようなオーバーロードはありません (メソッドの出番です)。私が興味を持っていたのは、それがすべてである場合よりも文字列コンストラクターを好むでしょう。ただし、既にを使用していた場合は、メソッドを使用して連鎖の恩恵を受けるのが理にかなっているかもしれません。以下は、デモンストレーションのための不自然な例です。AppendInsertStringBuilderStringBuilderAppend

var sb = new StringBuilder("This item is ");
sb.Insert(sb.Length, "very ", 2) // insert at the end to append
  .Append('*', 3)
  .Append("special")
  .Append('*', 3);
Console.WriteLine(sb.ToString()); // This item is very very ***special***
于 2012-12-13T16:59:43.447 に答える