我在词典下面:
Dictionary<string, string> d = new Dictionary<string, string>();
d.Add("ship", "I");
d.Add("shep", "V");
d.Add("ssed", "X");
d.Add("aspe", "L");
下面是输入文本行: string line =“shep ship ship”;
我怎样才能将上面的单词(shep,ship和ship)转换为上面字典中适当的罗马数字。对于上面的线,它应该显示为VII(shep shep ship)。
Dictionary<string, int> dCost = new Dictionary<string, int>();
dCost.Add("aspe aspe MaterialType1", 64);
dCost.Add("ssed ssed MaterialType2", 5880);
我想将上面的dCost字典键aspe aspe MaterialType1
转换为适当的罗马数字,从第一个字典开始
因此,上面两行应转换为LL MaterialType1
和其他一行,'XX MaterialType2`。将结果放在新词典上也可以,或者只是访问字典的第一个元素来获取/解析为罗马映射。
需要:现在,我一直在传递ROMAN值以转换其相关值,但是现在,我将在字典中提供输入,其中使用ROMAN编号进行映射。因此,我需要根据给定的输入获取适当的数字并传递给API以将罗马转换为数字。
任何人都可以建议我将这些词典与其映射值合并的最佳方法,对于linq或任何方法都可以。
谢谢
答案 0 :(得分:1)
你真的不太清楚你在追求什么,但我怀疑这至少会有所帮助:
public static string ReplaceAll(string text,
Dictionary<string, string> replacements)
{
foreach (var pair in replacements)
{
text = text.Replace(pair.Key, pair.Value);
}
return text;
}
注意:
答案 1 :(得分:0)
如果我们假设成本键总是以一个单词结尾(即 MaterialType1 ),则键中的最后一个空格将要翻译的文本与材料类型名称分开。
例如:
“aspe aspe MaterialType1”
要翻译此字符串,您可以使用类似此代码段的内容。
foreach(var cost in dCosts)
{
int lastSpaceIndex = cost.Key.LastIndexOf(" ");
string materialTypeName = cost.Key.Substring(lastSpaceIndex + 1)
.Trim();
string translatedKey = cost.Key.Substring(0, lastSpaceIndex);
foreach (var translation in d)
{
translatedKey = translatedKey.Replace(translation.Key, translation.Value)
.Trim();
}
translatedKey = translatedKey.Replace(" ", string.Empty);
Console.WriteLine("{0} {1} cost is {2}",
translatedKey,
materialTypeName,
cost.Value);
}
请以此为例。您可以按如下方式实现“已翻译”字符串键。
foreach(var cost in dCosts)
{
string translatedKey = cost.Key;
foreach (var translation in d)
{
translatedKey = translatedKey.Replace(translation.Key, translation.Value)
.Trim();
}
Console.WriteLine("{0} cost is {1}", translatedKey, cost.Value);
}
正如@JonSkeet在他的回答中所说,使用这段代码片段,你可以在“已翻译”的值之间保留空格,所以这并不能解决这个问题。