C# 在c中比较列表并返回匹配项#
比较两个列表并返回匹配项的最快和最好的方法是什么。 只有一个匹配是可能的。列表1包含来自数据库的动态数据 我现在的做法是:C# 在c中比较列表并返回匹配项#,c#,list,compare,match,C#,List,Compare,Match,比较两个列表并返回匹配项的最快和最好的方法是什么。 只有一个匹配是可能的。列表1包含来自数据库的动态数据 我现在的做法是: foreach (var item1 in List1) { foreach (var item2 in List2 ) { if(item2 == item1) string match = item1; } } 我觉得可以做得更快。使用 不确定它比当前代码快多少,可以使用秒表测量。但是在当前的代码中,您应该在查找匹配项时打
foreach (var item1 in List1)
{
foreach (var item2 in List2 )
{
if(item2 == item1)
string match = item1;
}
}
我觉得可以做得更快。使用
不确定它比当前代码快多少,可以使用秒表测量。但是在当前的代码中,您应该在查找匹配项时打破内部循环和外部循环。比如:
foreach (var item1 in List1)
{
string match = null;
foreach (var item2 in List2)
{
if (item2 == item1)
{
match = item1;
break;
}
}
if (match != null)
break;
}
你有很多方法可以做到这一点。这主要取决于您试图匹配的数据
- 你能做的第一件事是有一个排序的列表
- 然后,如果知道列表的中间值,就可以从头到尾遍历列表
- 但大多数情况下,只要返回您的价值,因为您已经找到了它
Foreach (var item1 in List1)
{
Foreach (var item2 in List2 )
{
if(item2 == item1) return item1;
}
}
如果您真的需要这个例程非常快,那么您必须根据列表中的数据进行优化
另外,如果两个列表中的数据都是string
,则可以为每个字符串生成一个hashcode(string.GetHashCode
),然后依靠hashcode在列表中进行排序和搜索
还有很多其他方法,但这一切都取决于:
- 列表中的数据量(如果只有100个元素,则不会有太多性能提升)
- 如果您的列表是静态的还是动态的
- 如果它们是动态的,它们可以改变的频率
- 您多久在这些列表中搜索一次
@哈比卜,是更快还是更简洁?我的意思是,它在内部做同样的剪贴吗?@tariq,是的,它在内部做循环,我不确定它是否更快,这就是为什么我提供了另一个选项,使用问题中修改过的代码。Linq平均会更慢,因为即使找到匹配项,它也会继续迭代。第二个代码示例将是最快的。@MatthewWatson,是的,这是正确的,因为
Intersect
将首先收集所有相交的元素,然后首先应用这并没有可能的那么快。它正在对match!=外部循环内为空。如果您只是从内部循环返回,您将避免在外部循环的每次迭代中在外部循环中进行比较。(例如,见我的答案。)考虑到问题要求的是“最快的方式”,这并不是最快的方式。
Foreach (var item1 in List1)
{
Foreach (var item2 in List2 )
{
if(item2 == item1) return item1;
}
}
foreach (var item1 in List1)
foreach (var item2 in List2)
if (item2 == item1)
return item1;
return null;