【发布时间】:2015-01-26 10:34:31
【问题描述】:
我有这样的事情:
List<string> listUser;
listUser.Add("user1");
listUser.Add("user2");
listUser.Add("userhacker");
listUser.Add("user1other");
List<string> key_blacklist;
key_blacklist.Add("hacker");
key_blacklist.Add("other");
foreach (string user in listUser)
{
foreach (string key in key_blacklist)
{
if (user.Contains(key))
{
// remove it in listUser
}
}
}
listUser的结果是:user1,user2。
问题是如果我有一个巨大的listUser(超过 1000 万)和巨大的key_blacklist(100.000)。该代码非常非常慢。
无论如何都要更快?
更新:我在那里找到了新的解决方案。 http://cc.davelozinski.com/c-sharp/fastest-way-to-check-if-a-string-occurs-within-a-string 希望当他进入那里时能对某人有所帮助! :)
【问题讨论】:
-
是否可以将其保留为字典?
-
该列表是错误的集合。
HashSet会好很多。 -
@AndreasNiedermair, @Jon 当您检查字符串是否包含其他字符串时,
HashSet将如何提供帮助? -
@tinhve 因为它被标记为
database,所以您的 1000 万个项目可能存储在数据库中。正确的做法是让数据库来执行此操作,但为了让我们帮助您,我们需要知道您使用的是哪种数据库以及如何访问它。 -
子字符串搜索总是很慢。但是你为什么要先添加这个用户呢?如果您不添加他,则以后不需要删除他。另外,正如 Rawling 已经提到的,您使用的是什么数据库?你想从数据库中删除它们吗?
标签: c# database performance