사전 값 검색 모범 사례
저는 최근 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
'IT' 카테고리의 다른 글
어느 정도 : 왜 *와 **가 /와 sqrt ()보다 빠릅니까? (0) | 2020.10.10 |
---|---|
@ExceptionHandler로 스프링 보안 인증 예외 처리 (0) | 2020.10.10 |
로그인 후 SSH 사용자를 사전 정의 된 명령 세트로 제한하는 방법은 무엇입니까? (0) | 2020.10.10 |
인덱싱 된 열의 MongoDB 선택 횟수 (고유 x)-대용량 데이터 세트에 대한 고유 한 결과 계산 (0) | 2020.10.10 |
flask-sqlalchemy 또는 sqlalchemy (0) | 2020.10.10 |