C# 不使用开关映射两个字符串数组
我有两个数组需要映射。编码C# 不使用开关映射两个字符串数组,c#,C#,我有两个数组需要映射。编码 var result = "[placeholder2] Hello my name is [placeholder1]"; var placeholder = { "[placeholder1]", "[placeholder2]", "[placeholder3]", "[placeholder4]" }; var placeholderValue = { "placeholderValue3", "placeholderValue2", "placeholder
var result = "[placeholder2] Hello my name is [placeholder1]";
var placeholder = { "[placeholder1]", "[placeholder2]", "[placeholder3]", "[placeholder4]" };
var placeholderValue = { "placeholderValue3", "placeholderValue2", "placeholderValue3" };
Array.ForEach(placeholder , i => result = result.Replace(i, placeholderValue));
给定
i
,占位符值
需要以智能方式设置。我可以实现一个switch语句。圈复杂度对于30个元素左右是不可接受的。要实现我的目标,什么是好的模式、扩展方法或其他方法?最小的代码更改是只使用for循环,而不是ForEach,或者在您的例子中,ForEach使用lambda。使用for循环,您将在placehoderValue
数组中获得相应值的索引
下一个改进是创建一个包含占位符及其值的对象数组,而不是需要保持同步的两个“并行”数组
比这更好,也更容易实现的是,只需拥有一个字典
,其中键是占位符,值是占位符值。这基本上通过使用KeyValuePair类为您提供了上述建议(因此您无需自行创建)
此时,伪代码变为:
foreach(占位符字典中的键)将键替换为占位符字典[key]
我想您应该使用它来组合占位符及其值
var result = "[placeholder2] Hello my name is [placeholder1]";
var placeholder = new[] { "[placeholder1]", "[placeholder2]", "[placeholder3]", "[placeholder4]" };
var placeholderValue = new[] { "placeholderValue1", "placeholderValue2", "placeholderValue3", "placeholderValue4" };
var placeHolderPairs = placeholder.Zip(placeholderValue, Tuple.Create);
foreach (var pair in placeHolderPairs)
{
result = result.Replace(pair.Item1, pair.Item2);
}
为了简单起见,我跳过了空检查
string result = "[placeholder2] Hello my name is [placeholder1]";
var placeHolders = new Dictionary<string, string>() {
{ "placeholder1", "placeholderValue1" },
{ "placeholder2", "placeholderValue2" }
};
var newResult = Regex.Replace(result,@"\[(.+?)\]",m=>placeHolders[m.Groups[1].Value]);
string result=“[Placeholder 2]你好,我的名字是[Placeholder 1]”;
变量占位符=新字典(){
{“占位符1”,“占位符值1”},
{“占位符2”,“占位符值2”}
};
var newResult=Regex.Replace(结果,@“\[(.+?)\]”,m=>占位符[m.Groups[1].Value]);
因此,对于每个占位符,您将尝试用占位符值1
、占位符值2
和占位符值3
中的每一个来替换它。为什么不使用IDictionary
?这似乎是它的完美用途?不久前我也在做类似的事情@杰里米霍洛瓦茨-因为这将是一个过于简单和优雅的想法!或者,因为我没想到。我就知道你们会挺过来的。感谢您的帮助,尤其是MatchEvaluator的使用