之前可能已经提出这个问题,但我找不到同样的情况。
我获得了一个庞大的单个字符串列的SQL数据集(即包含公司分支的城市)。
我还获得了更大的字符串主数据集(即世界上所有城市)。
第一个数据集每天都在变化。我需要每天检查一次,以检查是否可以在主数据集中找到每个字符串。
我无法控制任何数据集的设计。
我试过了:
Foreach (cityRow in dailyDS.Tables[0].Rows)
{
DataRow[] row = masterDs.Tables[0].Select("City like '%" + (string)cityRow["City"] + "%'");
}
并使用linq(比select语句快得多)
Foreach (cityRow in dailyDS.Tables[0].Rows)
{
DataRow existingRow = masterDs.Tables[0].AsEnumerable().Where(row => row.Field<string>("City") == (string)cityRow["City"]).FirstOrDefault();
}
我的计划的整个目标是生成一个城市列表,其中目前有一个公司分支不在主城市列表中(即,它们拼写错误等)我已编写该程序但只是想要要知道:
在这样的数据集中搜索确切值的最有效方法是什么?
答案 0 :(得分:2)
如果您希望速度非常快,则必须将世界上所有城市加载到HashSet<string>
。
然后为每个cityOfCompany检查HashSet.Contains(cityOfCompany)
只需23k字符串即可检查,这应该在现代PC上运行几秒钟。