IT

사전 값 검색 모범 사례

lottoking 2020. 10. 10. 10:27

사전 값 검색 모범 사례


저는 최근 Dictionary.TryGetValue(TKey key, out TValue value)에 사전에 값을 검색하는 더 나은 접근 방식이 무엇인지 확인 하고 궁금했습니다.

저는 전통적으로 다음을 수행했습니다.

if (myDict.Contains(someKey))
     someVal = myDict[someKey];
     ...

아는 않는 한 내가 거기에있을 수 있습니다.

그냥하는 것이 더 낫 오류?

if (myDict.TryGetValue(somekey, out someVal)
    ...

어느 것이 더 나은 방법입니까? 하나가 다른 것보다 빠릅니까? Try 버전이 자체적으로 try / catch를 '삼키고'논리 사용하면 속도가 느려질로 생각합니다.


FindEntry는 한 번만 호출되기 때문에 TryGetValue가 약간 더 빠 사용합니다.

얼마나 빨리요? 손에있는 데이터 세트에 따라 늘어서 있습니다. 메소드를 호출하면 사전이 내부 검색을 수행하여 해당 브랜드를 찾습니다. true를 반환하면 실제 값을 위해 건물 검색이 필요합니다. TryGetValue를 사용하면 보안을 한 번만 검색하고 경우 변수에 값을 할당합니다.

참고 : 실제로 오류가 발생하는 것은 아닙니다.

전화 :

public bool TryGetValue(TKey key, out TValue value)
{
    int index = this.FindEntry(key);
    if (index >= 0)
    {
        value = this.entries[index].value;
        return true;
    }
    value = default(TValue);
    return false;
}

ContainsKey는 다음과 가변됩니다.

public bool ContainsKey(TKey key)
{
    return (this.FindEntry(key) >= 0);
}

사실 TryGetValue가 더 빠 사용하지 않습니다. 얼마나 빨리요? 손에있는 데이터 세트에 따라 늘어서 있습니다. 메소드를 호출하면 사전이 내부 검색을 수행하여 해당 브랜드를 찾습니다. true를 반환하면 실제 값을 위해 건물 검색이 필요합니다. TryGetValue를 사용하면 보안을 한 번만 검색하고 경우 변수에 값을 할당합니다.

편집하다 :

알겠습니다. 당신의 혼란을 이해합니다.

사례 1 :

if (myDict.Contains(someKey))
     someVal = myDict[someKey];

이 경우 FindEntry에 대한 2 개의 호출이 있습니다. 하나는 키가 있는지 확인하고 다른 하나는 검색합니다.

사례 2 :

myDict.TryGetValue(somekey, out someVal)

이 경우 결과가 동일한 방식에서 실제 검색을 위해 유지되기 때문에 FindKey에 대한 호출이 하나만 있습니다.


trygetvalue가 다음과 같은 일을 상상합니다.

if(myDict.ReallyOptimisedVersionofContains(someKey))
{ 
  someVal = myDict[someKey];
  return true;
}
return false;

그러니 아무데도 시도 / 잡지 않기를 바랍니다.

정말 방법이라고 생각합니다. 나는 일반적으로 코드 한두 줄을 절약하기 때문에 사용합니다.

참고 URL : https://stackoverflow.com/questions/378465/retrieving-dictionary-value-best-practices