티스토리 뷰
[씨#] C #에서 Queryable.Contains 메서드와 List <T> .Contains 메서드의 차이점은 무엇입니까?
필살기쓰세요 2021. 3. 1. 15:24There is no difference in this case between List.Contains (which is the implementation of ICollection.Contains) and Enumerable.Contains - in the case where the enumerable is a collection, IEnumerable.Contains simply invokes ICollection.Contains.
The reasoning there is that some collections - such as SortedSet - can implement a Contains method that operates at better than O(n) time. For non-collection types of Enumerable, IEnumerable.Contains will do a linear search over the enumeration.
There is also Queryable.Contains, but that's different - List isn't a queryable. Queryable.Contains can build this into a query expression which can be translated (for example, into SQL). Queryable and Enumerable extension methods are very different under the hood.
-------------------기능의 차이에 대해 물어 보면 실제로는 없습니다.
List.Contains()
ICollection
인터페이스 의 일부이며 .NET Framework 2.0부터 존재합니다. 개발자는 항상 있는지 확인하는 LINQ 전에이 방법을 사용했다 List
거나 또 다른 ICollection
항목이 포함되어 있습니다.
.Contains<T>
LINQ의 일부입니다. 이 방법을 모든 IEnumerable
컬렉션, 심지어 배열 또는 사용자 정의 와 함께 사용할 수있게 해주는 쿼리 언어입니다 . 데이터 소스는 데이터베이스를 좋아합니다. JSON 또는 XML 등과 같은 데이터 형식
실제로 (예 :) 컬렉션에서 LINQ .Contains<T>
를 호출하면 자체 메서드를 호출합니다 .IEnumerable
ICollection
List<T>
ICollection.Contains
public static bool Contains<TSource>(this IEnumerable<TSource> source, TSource value)
{
ICollection<TSource> collection = source as ICollection<TSource>;
if (collection != null)
return collection.Contains(value);
return Enumerable.Contains<TSource>(source, value, (IEqualityComparer<TSource>) null);
}
-------------------"LIST.contains"의 알고리즘 복잡도는 항상 O (n)입니다.
"Queryable.contains"의 복잡성은 구현 된 컬렉션에 따라 달라집니다. 예를 들어 기본 컬렉션이 "Hashset"이면 알고리즘 복잡성은 O (1)입니다.
출처
https://stackoverflow.com/questions/39970025