在没有开关的情况下映射两个字符串数组
本文关键字:两个 数组 字符串 映射 开关 情况下 | 更新日期: 2023-09-27 18:31:52
>我有两个数组需要映射。 在代码中
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
,placeholderValue
需要以智能的方式设置。 我可以实现一个开关语句。 对于30个左右的元素,其圈复杂性是不可接受的。 什么是实现目标的良好模式、扩展方法或其他手段?
为了简单起见,我跳过了空检查
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]);
最小的代码更改是只使用 for 循环,而不是 ForEach,或者在您的情况下,使用 ForEach 获取 lambda。 使用 for 循环,您将在 placehoderValue
数组中获得相应值的索引。
下一个改进是创建一个包含占位符及其值的对象数组,而不是两个需要保持同步的"并行"数组。
比这更好,也更容易实现,就是只有一个Dictionary
键是占位符,值是占位符值。 这基本上通过使用 KeyValuePair 类为您执行上述建议(因此您无需创建自己的类)。
此时,伪代码变为:
foreach(key in placeholderDictionary) replace key with placeholderDictionary[key]
我认为您想使用Zip
将占位符与其值组合在一起。
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);
}