programing

목록: 카운트 대 카운트()

kakaobank 2023. 5. 22. 21:15
반응형

목록: 카운트 대 카운트()

목록이 주어졌을 때 내부의 요소 수를 결정하기 위해 선호되는 방법은 무엇입니까?

var myList = new List<string>();

myList.Count
myList.Count()

Count()는 LINQ에 의해 도입된 확장 방법입니다.Count속성은 목록 자체의 일부입니다(에서 파생됨).ICollection. 하지만 내부적으로 LINQ는 당신의IEnumerable도구들ICollection그리고 만약 그렇다면 그것은 그것을 사용합니다.Count소유물.그래서 결국에는 어떤 것을 사용하는지에 대한 차이가 없습니다.List.

내 요점을 더 증명하기 위해, 여기 리플렉터의 코드가 있습니다.Enumerable.Count()

public static int Count<TSource>(this IEnumerable<TSource> source)
{
    if (source == null)
    {
        throw Error.ArgumentNull("source");
    }
    ICollection<TSource> is2 = source as ICollection<TSource>;
    if (is2 != null)
    {
        return is2.Count;
    }
    int num = 0;
    using (IEnumerator<TSource> enumerator = source.GetEnumerator())
    {
        while (enumerator.MoveNext())
        {
            num++;
        }
    }
    return num;
}

항상 선호Count그리고.Length확장 메서드에 대한 유형의 속성Count()전자는 이들을 포함하는 모든 유형에 대해 O(1)입니다.Count()확장 메서드에는 O(1) 시간에도 실행되도록 할 수 있는 몇 가지 유형 검사 최적화가 있지만 기본 컬렉션이 알고 있는 몇 가지 유형 중 하나가 아니면 O(N)로 저하됩니다.

myList.Count는 목록 개체의 메서드이며, 필드 값만 반환하므로 매우 빠릅니다.이것은 작은 방법이기 때문에 컴파일러(또는 런타임)에 의해 인라인화될 가능성이 매우 높기 때문에 컴파일러가 다른 최적화를 수행할 수 있습니다.

myList.Count()는 IEnumberable의 모든 항목을 루프하는 확장 메서드(LINQ에서 도입)를 호출하므로 속도가 훨씬 느려야 합니다.

그러나 (Microsoft 구현에서) Count 확장 메서드에는 목록의 Count 속성을 사용할 수 있는 Lists에 대한 "특수한 경우"가 있습니다. 이는 Count() 메서드가 Count 속성보다 조금 느리다는 것을 의미합니다.

대부분의 응용 프로그램에서 속도 차이를 구별할 수 없을 것입니다.

따라서 목록을 처리 중인 경우 Count 속성을 사용하고, 그렇지 않은 경우 "알 수 없는" IE 번호가 있는 경우 Count() 메서드를 사용하여 최적화되도록 하십시오.

만약 당신이 당신의 컬렉션의 유형을 바꾸고 싶다면 당신은 더 나은 서비스를 제공할 것입니다.Count()연장의이렇게 하면 코드를 재팩터링할 필요가 없습니다(사용하기 위해).Length예를 들어).

언급URL : https://stackoverflow.com/questions/4098186/lists-count-vs-count

반응형