我有一个很大的List<MyClass>
(大约600.000条记录+),我需要提取其中MyClass.Property1
是我的输入字符串的精确匹配项或最接近的记录。但是,即使看起来似乎也不是模糊字符串匹配问题,所以我不能使用Levenshtein距离。为了让事情更清楚一点,我会举一个例子。
假设以下是我的数据集(仅列出MyClass.Property1
):
242
2421
2422
24220
24221
24222
24223
24224
现在我期望的是,如果我在输入2422中输入,我希望在输出中给出第三条记录。如果我输入24210,我希望在输出中出现第二条记录,这是我的输出中包含的最长字符串。为了使事情更快,当我填充List<MyClass>
时,我已经在Dictionary<int,int>
中保存了字符串中第一个数字更改的索引(例如,从19999到20000),因此我可以减小大小我要搜索匹配的数据集。我想知道的是:达到目标的最快方法是什么?
我唯一能想到的就是这样:
由于我确定示例中List<MyClass>
由MyClass.Property1
进行了排序,并且假设我已基于以下内容提取了一个名为List<MyClass>
的{{1}}:我之前提到的字典,我会做的
SubSet
我在这里可以看到的最明显的问题是,如果期望的结果是在MyClass result = null;
foreach(MyCLass m in SubSet)
{
if (input.Contains(m.Property1))
{
// if the 2 strings are equal i've found the exact match
if(input == m.Property1)
return m.Property1;
else
result = m;
}
else
return result;
}
的结尾,我需要遍历数千条记录。您能想到实现我的目标的最佳方法吗?改进我当前代码的方法?
答案 0 :(得分:0)
也许,您可以在
之类的递归函数中使用Linq方法public string test(string input)
{
string result = Subset.FirstOrDefault(a => a == input);
if (result == null)
return test(input.Substring(0, input.Length - 2));
else
return result;
}