比较2个列表并返回匹配的最快和最好的方法是什么。 只有一场比赛是可能的。 List1包含来自数据库的动态数据。
我现在这样做的方式:
foreach (var item1 in List1)
{
foreach (var item2 in List2 )
{
if(item2 == item1)
string match = item1;
}
}
我觉得它可以更快地完成。
答案 0 :(得分:13)
var matchItem = List1.Intersect(List2).First();
不确定当前代码的速度有多快,您可以使用秒表进行测量。但是在你当前的代码中,你应该在找到匹配时打破你的内循环和外循环。类似的东西:
foreach (var item1 in List1)
{
string match = null;
foreach (var item2 in List2)
{
if (item2 == item1)
{
match = item1;
break;
}
}
if (match != null)
break;
}
答案 1 :(得分:2)
你有很多方法可以做到这一点。它主要取决于您尝试匹配的数据。
前2个点只有在您的列表有一些数字值时才能使用,您可以依赖它来识别项目。
您可以做的第一个优化是:
Foreach (var item1 in List1)
{
Foreach (var item2 in List2 )
{
if(item2 == item1) return item1;
}
}
如果您确实需要此例程非常快,则必须根据列表中的数据进行优化。
此外,如果两个列表中的数据均为string
,则可以为每个字符串生成哈希码(string.GetHashCode
),然后依靠hascode对列表进行排序和搜索。
还有很多其他方法,但这一切都取决于:
答案 2 :(得分:1)
当您找到任何匹配项时,可以使循环短路。然后,您可以使用返回匹配项的方法,如果没有匹配则返回null(假设元素是引用类型):
foreach (var item1 in List1)
foreach (var item2 in List2)
if (item2 == item1)
return item1;
return null;