【发布时间】:2023-03-21 22:50:01
【问题描述】:
我正在构建一个自定义文本框,以便在社交媒体环境中提及人。这意味着我检测到有人何时键入“@”并在联系人列表中搜索“@”符号后面的字符串。
最简单的方法是使用 LINQ,类似于Members.Where(x => x.Username.StartsWith(str)。问题是潜在结果的数量可能非常高(高达 50,000 左右),而性能在这种情况下极为重要。
我有哪些替代解决方案?是否有任何类似于字典(基于哈希表的解决方案)的东西,但这将允许我使用 Key.StartsWith 而无需遍历每个条目?如果没有,实现这一目标的最快和最有效的方法是什么?
【问题讨论】:
-
您不必一次全部加载。您绝对不会显示包含 50000 个结果的下拉列表,最多可能只有 10 个。因此,只需搜索您的列表并获得前 10 个左右的匹配项。当然,还要确保搜索是异步的,并且列表是有序的(或者甚至可能按字母顺序排列到字典中)以加快搜索速度。
-
看看en.wikipedia.org/wiki/Trie StartWith 对于大型数据集来说不够好,尤其是在每次击键时都需要调用它时。
标签: c# performance linq uwp hashtable