我正在处理以下代码,基于用户指定的搜索短语查找“描述”。将关键词视为重要短语,将值视为描述性信息来查找该短语。
可以将其视为商店定位器(我能想到的最佳类比)。如果您搜索“Target”(键),则会得到许多城市(值),其中一些可能具有相同的名称。因此,同一城市可能会有多个Target。
明显不能使用
基本上,我从
上述仅为虚假测试信息,但我认为必须有更清洁的方法来获取“查找”功能的结果,因为它似乎非常适用于Linq。不幸的是,我对Linq非常陌生,而Linq本身的语法似乎并不容易理解。在这段代码中,我使用以下内容获取结果(硬编码搜索项仅供测试):
我对以上代码没有问题,但我的问题是:是否有一种使用Linq来实现我想要完成的目标的方法?我感觉我所写的不是最好的方式...值得注意的是,部分的searchTerm也必须能够找到它出现在键中的结果(因此包含)。现有的答案无法完全回答我的特定问题。我找不到一种通过部分键搜索来获取值的方法。
可以将其视为商店定位器(我能想到的最佳类比)。如果您搜索“Target”(键),则会得到许多城市(值),其中一些可能具有相同的名称。因此,同一城市可能会有多个Target。
明显不能使用
Dictionary
,因为可能会有重复的商店名称或城市名称。这就是我的实际情况:基本上,我从
List<KeyValuePair<string, string>>
开始,允许在两个方向上出现重复项,然后将其转换为Lookup<string, string>
,但我认为它并没有像我想象的那样不易混淆。List<KeyValuePair<string, string>> kvpList = new List<KeyValuePair<string, string>>();
Lookup<string, string> collection;
kvpList.Add(new KeyValuePair<string, string>("K1", "R1"));
kvpList.Add(new KeyValuePair<string, string>("K1", "R1"));
kvpList.Add(new KeyValuePair<string, string>("K1", "R2"));
kvpList.Add(new KeyValuePair<string, string>("K2", "R1"));
kvpList.Add(new KeyValuePair<string, string>("K2", "R2"));
kvpList.Add(new KeyValuePair<string, string>("K2", "R3"));
kvpList.Add(new KeyValuePair<string, string>("K2", "R1"));
collection = (Lookup<string,string>)kvpList.ToLookup(k => k.Key, k => k.Value);
上述仅为虚假测试信息,但我认为必须有更清洁的方法来获取“查找”功能的结果,因为它似乎非常适用于Linq。不幸的是,我对Linq非常陌生,而Linq本身的语法似乎并不容易理解。在这段代码中,我使用以下内容获取结果(硬编码搜索项仅供测试):
string searchTerm = "K2";
List<string> uniqueResults = new List<string>();
foreach (var item in collection)
{
if (item.Key.Contains(searchTerm))
{
foreach (var value in item)
{
if (!uniqueResults.Contains(value))
{
uniqueResults.Add(value);
Console.WriteLine("Added: " + value);
}
else
{
Console.WriteLine("Skipped duplicate: " + value);
}
}
}
}
我对以上代码没有问题,但我的问题是:是否有一种使用Linq来实现我想要完成的目标的方法?我感觉我所写的不是最好的方式...值得注意的是,部分的searchTerm也必须能够找到它出现在键中的结果(因此包含)。现有的答案无法完全回答我的特定问题。我找不到一种通过部分键搜索来获取值的方法。
GetHashCode
,无法处理字符串的一部分(如何为所有子字符串返回单个值?)。 - Tim Schmelter