当然,创建一个字典,其中包含一侧的值列表和另一侧的响应。
private IDictionary<List<String>, List<String>> _responses = new Dictionary<List<String>, List<String>>();
_responses.Add(
new List<String> { "Hello there!", "Hey mate", "Hi!" }},
new List<String> { "sup" );
_responses.Add(
new List<String> { "Buddy", "Mate", "Hombre" }},
new List<String> { "sup");
现在为了检索一些东西:
foreach(var keyword in _responses.Keys){
if(keywords.Contains("sup"){
return _responses[keyword];
}
}
搜索“sup”将为您返回适当响应的列表。我也使用了List<String>
for 查找值,以便您可以将多个关键字链接到相同的搜索结果。
如果您要输入一个由多个值组成的字符串,只需为其添加一个外循环:
整个重写:
此示例假设您有一个输入字符串。您的要求是检查此输入字符串是否包含任何一组单词。每组词都应该能够通过一个词来引用。
void Main()
{
var babel = new Babel("hi homies, this is for my mate out there.");
if(babel.HasAnswer("sup") && babel.HasAnswer("friend")){
Console.WriteLine ("It has both!");
} else {
Console.WriteLine ("Boo Jeroen you suck");
}
}
public class Babel {
private IDictionary<List<String>, List<String>> _responses = new Dictionary<List<String>, List<String>>();
private String query;
public Babel(string query){
this.query = query;
_responses.Add(
new List<String> { "sup" },
new List<String> { "hello", "hey", "hi"});
_responses.Add(
new List<String> {"friend" },
new List<String> { "buddy", "mate", "hombre" });
}
public bool HasAnswer(string input){
foreach(var token in input.Split(' ')) {
foreach(var keyword in _responses.Keys){
if(keyword.Contains(token)){
return ContainsAny(_responses[keyword]);
}
}
}
return false;
}
private bool ContainsAny(List<String> toCompare){
foreach(string item in toCompare){
foreach(string token in query.Split(' ')){
if(token == item) return true;
}
}
return false;
}
}
输出:
两者都有!
这种方法的好处:添加一组新单词就像在字典中添加一个条目一样简单。非常高的扩展性!您还可以让多个值引用同一个列表(如果您想创建应该引用与“sup”相同的值的“howdie”,您可以将其添加到列表中并完成)。