我有一个来自外部数据库的大约1500个字符串的列表,随着时间的推移,当一组业务用户管理它们时,它们会出现具有语义价值的重复子串。
我正在构建一个前端,并希望向用户显示这些子字符串的过滤下拉列表。
例如,如果我有输入字符串:
我想回来:
我的第一个想法是有一个阈值参数和一个分界符列表。对于上面我可能会说threshold = .3和delimiters是space,(和)。
然后使用分隔符做一个string.split并使用一个数据结构,就像一个计算重复项目的集合(?)......
我不是想让别人在这里为我做我的工作 - 对那些做过这件事的人采取的方法的建议会很棒。
答案 0 :(得分:2)
一种简单的方式就像你说的那样。设置Dictionary<String, int>
以包含您的数据。然后,这很简单:
for each word in string
if word is in dictionary
increment dictionary value
else
add to dictionary with value of 1
然后,只需根据阈值过滤该字典,或返回按计数排序的条目。您也可以选择使用您不想跟踪的常用单词的“忽略列表”。
此外,如果您想要不区分大小写,请构建如下字典:new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
答案 1 :(得分:2)
这个问题是Linq方法的一个很好的选择:
var words = from s in listOfStrings
from word in s.Split(new[] { ' ', '(', ')' }, StringSplitOptions.RemoveEmptyEntries)
group word by word;
var dic = words.ToDictionary(g => g.Key, g => g.Count());
答案 2 :(得分:0)
var input = new List<string>();
input.Add("Foo"); // I'd go for splitting by delimiters as well
input.Add("Bar");
input.Add("Foo");
var results = input.Distinct(); // -> Foo, Bar
我不太确定你的门槛是多少。