比较 2 个列表并返回匹配项的最快和最佳方法是什么。只有一场比赛是可能的。List1 包含来自数据库的动态数据。
我现在这样做的方式:
foreach (var item1 in List1)
{
foreach (var item2 in List2 )
{
if(item2 == item1)
string match = item1;
}
}
我有一种感觉,它可以做得更快。
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;
}
You can short-circuit the loops when you find any matches. You could then use a method that returns the item that matches, or null if none matched (assuming the elements are references types):
foreach (var item1 in List1)
foreach (var item2 in List2)
if (item2 == item1)
return item1;
return null;
你有很多方法可以做到这一点。这主要取决于您要匹配的数据。
此外,前 2 点仅在您的列表有一些可以用来识别项目的数值时才有效。
您可以做的第一个优化是:
Foreach (var item1 in List1)
{
Foreach (var item2 in List2 )
{
if(item2 == item1) return item1;
}
}
如果您确实需要此例程非常快,则必须根据列表中的数据进行优化。
此外,如果您的数据string
在两个列表中,您可以为每个字符串 ( string.GetHashCode
) 生成一个哈希码,然后依靠哈希码在您的列表中进行排序和搜索。
还有许多其他方法,但这一切都取决于: