次のように、C#で文字のコレクションを別のコレクションにそれぞれ置き換える方法はありますか?
"ABCDEF.KindOfReplace( "AE", "12"); // the result: "1BCD2F"
いいえ、ありませんが、あなたのコードは次のものと同等のようです:
var myString = "ABCDEF";
var newString = myString.Replace("A", "1").Replace("E", "2");
これを改善するために拡張メソッドを作成することもできますが、大規模な置換配列の場合は特に効率的ではありません。
編集:
以下のコメントで指摘されているように、StringBuilder
置換する文字列/文字が多数ある場合は a を使用できます。
いいえ、直接ではありません。文字列プリミティブまたは正規表現を使用して自分で作成する必要があります。
簡単な実装は次のようになります。
public static string KindOfReplace(this string original, string charsToReplace, string replacements)
{
var replacementDic = charsToReplace.Select((ch,i) => new { ch, i }).ToDictionary(x => x.ch, x => replacements[x.i]);
var result = original.Select(ch => replacementDic.ContainsKey(ch) ? replacementDic[ch] :ch);
return new String(result.ToArray());
}
(上記は一例です。同じ長さの文字列にはガードを追加することを忘れないでください)。
箱から出してそのような機能はありません。何かを手作りする場合、これは多くの可能な解決策の 1 つかもしれません。char 配列を操作し、IndexOfAnyを使用して置換する文字を見つけます。
public static string KindOfReplace( this string src, string find, string repl)
{
char[] target = src.ToCharArray();
char[] findChars = find.ToCharArray();
int finder = src.IndexOfAny(findChars);
while(finder>-1)
{
int charFind = find.IndexOf(src[finder]);
target[finder] = repl[charFind];
finder = src.IndexOfAny(findChars, finder+1);
}
return new String(target);
}