在大型数据集中搜索项目的最有效方法
Most efficient way to search large dataset for item
以前可能有人问过这个问题,但我没能找到相同的场景。
我得到了一个巨大的 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();
}
我的程序的全部目的是生成一个城市列表,其中当前有一个公司分支机构不在主城市列表中(即,它们拼写错误等)我已经编写了程序但是只想知道:
在这样的数据集中搜索精确值的最有效方法是什么?
如果你想快速拥有它,你必须将世界上所有城市加载到一个HashSet<string>
。
然后为每个 cityOfCompany 检查 HashSet.Contains(cityOfCompany)
只需 23k 个字符串来检查这在现代 PC 上应该 运行 几秒钟。
以前可能有人问过这个问题,但我没能找到相同的场景。
我得到了一个巨大的 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();
}
我的程序的全部目的是生成一个城市列表,其中当前有一个公司分支机构不在主城市列表中(即,它们拼写错误等)我已经编写了程序但是只想知道:
在这样的数据集中搜索精确值的最有效方法是什么?
如果你想快速拥有它,你必须将世界上所有城市加载到一个HashSet<string>
。
然后为每个 cityOfCompany 检查 HashSet.Contains(cityOfCompany)
只需 23k 个字符串来检查这在现代 PC 上应该 运行 几秒钟。