我有一个如下的字典,
Page {
id: p_basicpage
anchors.fill: parent
现在我的要求说当字符串包含PropStreetSuffixDict.Add("ROAD", "RD");
PropStreetSuffixDict.Add("STREET","ST"); and many more.
或ROAD
的子字符串时,我想返回该子字符串的相关值。
例如.. STREET
应该返回CHURCH ACROSS ROAD
这是我试过的,只有在输入字符串与字典的键完全相同时才有效。
RD
注意:
如果一个字符串包含多个这样的子字符串,那么它应该返回任何子字符串的第一个出现的值。
即如果输入private string GetSuffix(string input)
{
string suffix=string.Empty;
suffix = PropStreetSuffixDict.Where(x => x.Key.ToUpper().Trim() ==
input.ToUpper().Trim()).FirstOrDefault().Value;
return suffix;
}
,则应返回STREET CHURCH ACROSS ROAD
而不是ST
答案 0 :(得分:1)
您可以尝试这样的事情
private string GetSuffix(string input)
{
string suffix=string.Empty;
string[] test =input.ToUpper().Split(' ');
suffix =(from dic in PropStreetSuffixDict
join inp in test on dic.Key equals inp
select dic.Value).LastOrDefault();
return suffix;
}
拆分输入然后使用linq
答案 1 :(得分:0)
如果您希望它在输入字符串(NAME SEQ
MyTableName1 1280
MyTableName1 3000
)中返回第一个匹配项,则会变得有点棘手。
下面的代码将在输入字符串中找到所有键出现的位置,并返回第一个找到的位置的值。
GetSuffix("CHURCH STREET ACROSS ROAD) ==> "STREET"
如果您不关心输入字符串中的出现顺序,可以将其简化为:
private string GetSuffix(string input)
{
var suffix = PropStreetSuffixDict
.Select(kvp => new
{
Position = input.IndexOf(kvp.Key.Trim(), StringComparison.CurrentCultureIgnoreCase),
Value = kvp.Value
})
.OrderBy(x => x.Position)
.FirstOrDefault(x => x.Position > -1)?.Value;
return suffix ?? string.Empty;
}
答案 2 :(得分:0)
我建议使用RegEx
分割你的单词,这样你就可以有效地分割多个字符,而不仅仅是空格,如果需要的话。此解决方案还允许非常轻松地替换单个单词,而无需处理跟踪匹配单词的位置和长度与替换值的长度。
你可以使用这样的函数:
public string ReplaceWords(string input, Dictionary<string,string> dictionary)
{
var result = Regex.Replace(input, @"\w*", (match) =>
{
if (dictionary.TryGetValue(match.Value, out var replacement))
{
return replacement;
}
return match.Value;
});
return result;
}
它将采用输入字符串,将其拆分,并将单个单词替换为所提供字典中的单词。 RegEx
的特定\w*
将匹配任何连续的“单词”字符,因此它将在空格,逗号,短划线以及不属于“单词”的任何其他内容上中断。 / p>
此代码 使用您可能无法访问的一些较新的C#语言功能(内联输出参数)。如果您不能使用它们,请告诉我,如果没有它们,我会更新它。
你可以像这样使用它:
Console.WriteLine(ReplaceWords("CHURCH ACROSS ROAD", PropStreetSuffixDict));
Console.WriteLine(ReplaceWords("CHURCH ACROSS STREET", PropStreetSuffixDict));
Console.WriteLine(ReplaceWords("CHURCH ACROSS ROAD, LEFT AT THE OTHER STREET", PropStreetSuffixDict));
以下结果:
教会跨越RD
教堂跨越ST
教堂跨越RD,离开其他ST