Этот вопрос относится к this one, но не совсем тот же Я думаю,.Linq performance: Any vs. Содержит
Дано:
class Foo
{
public string Bar { get; set; }
}
...
var c1 = new List<Foo>() { ... };
var c2 = new List<Foo>() { ... };
Следующие 2 петли дают одинаковый результат:
foreach (var item in c2.Where(f => c1.Any(f1 => f1.Bar.Equals(f.Bar))))
{ ... }
foreach (var item in c2.Where(f => c1.Select(f1 => f1.Bar).Contains(f.Bar)))
{ ... }
ли они одинаково быстро?
Разница с the other question, является ли дополнительное заявление Select
здесь, изменяет важность характера базовой коллекции.
Другими словами: делает это содержит:
foos.Contains(foo1)
действуют на том же "вид коллекции" как этот:
foos.Select(f=>f.Bar).Contains(foo1.Bar)
Моя возможно -naive- мысль может быть: «Как только мы отстаем от выбора Linq, все просто« Списки », поэтому оба и« Содержат »- это O (n)».
Pretty darn Ближайший к вам вопрос: http://stackoverflow.com/questions/4445219/linq-ring-any-vs-contains-for-huge-collections –
На самом деле вы ответили сами (и вы можете получить подтверждение с помощью точка останова в отладке ... –
Существует небольшое различие между двумя случаями в том, что вы проверяете, являются ли строки равными, а другая, которую вы проверяете, если одна строка содержит другую строку. – Kevin