[解決済み] IEnumerable<char> から文字列へ [重複]。
2022-04-26 13:46:26
質問
今まで一度も遭遇したことがなかったのですが、今回遭遇して、本当に簡単な方法で
IEnumerable<char>
から
string
.
私が思いつく最良の方法は
string str = new string(myEnumerable.ToArray());
しかし、私には、これでは新しい
char[]
を作成し、その後に新しい
string
というのは、高い気がします。
これは、.NETフレームワークのどこかに組み込まれている一般的な機能だと思ったのですが。もっと簡単な方法はないのでしょうか?
興味のある方のために説明すると、私がこれを使いたい理由は、LINQを使って文字列をフィルタリングするためです。
string allowedString = new string(inputString.Where(c => allowedChars.Contains(c)).ToArray());
解決方法は?
を使用することができます。
String.Concat()
.
var allowedString = String.Concat(
inputString.Where(c => allowedChars.Contains(c))
);
洞窟
: この方法は、若干のパフォーマンスへの影響があります。
String.Concat
は文字の集合を特別扱いしないので、あたかもすべての文字が文字列に変換され、前述のように連結されたかのように動作します。
ドキュメントにある
(
で、実際にそうなります。
). 確かにこれは、このタスクを達成するための組み込みの方法を提供しますが、もっとうまくできるはずです。
フレームワーク内で
char
ということで、実装する必要があります。 文字列ビルダーに文字を追加する単純なループを作成するのは簡単です。
これは開発機で取ったベンチマークですが、だいたい合っているようです。
32ビットのリリースビルドで、300文字のシーケンスを1000000回繰り返しました。
ToArrayStringです。 00:00:03.1695463 コンカット 00:00:07.2518054 StringBuilderChars: 00:00:03.1335455 StringBuilderStrings: 00:00:06.4618266
static readonly IEnumerable<char> seq = Enumerable.Repeat('a', 300);
static string ToArrayString(IEnumerable<char> charSequence)
{
return new String(charSequence.ToArray());
}
static string Concat(IEnumerable<char> charSequence)
{
return String.Concat(charSequence);
}
static string StringBuilderChars(IEnumerable<char> charSequence)
{
var sb = new StringBuilder();
foreach (var c in charSequence)
{
sb.Append(c);
}
return sb.ToString();
}
static string StringBuilderStrings(IEnumerable<char> charSequence)
{
var sb = new StringBuilder();
foreach (var c in charSequence)
{
sb.Append(c.ToString());
}
return sb.ToString();
}
関連
-
[解決済み】「namespace」なのに「type」のように使われる。
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] バイトを文字列に変換する
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】大文字・小文字を区別しない「Contains(string)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「未割り当てのローカル変数を使用」とはどういう意味ですか?
-
[解決済み】ASP.NET Core Dependency Injectionのエラーです。アクティブ化しようとしているときに、タイプのサービスを解決できません。
-
[解決済み】WPFでXamlファイルにコメントを追加する方法は?
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み】プロセスが実行されているかどうかを知るには?
-
VSでscanfエラーを恒久的に解決するには、ソースファイルを作成し、自動的に#define _CRT_SECURE_NO_WARNINGS 1を追加してください。
-
[解決済み] .NETの文字列を切り捨てるにはどうすればよいですか?