2016-07-04 8 views
2

특정 문자열이 미리 결정된 문자열 집합 중 하나인지 확인해야합니다.테이블 액세스 대 함수 호출 + 조건부 결정 : 어느 쪽이 빠릅니까?

내 마음에 와서 할 수있는 두 가지 방법 : 테이블을 설정하면 특정 값

local isParticular = { 
    [string1] = true, 
    [string2] = true 
} 

print(isParticular[string1]) -- true 
print(isParticular[randomString]) -- nil -> false 

에 true를 돌려 또는 조건부 결정

function isParticular(s) 
    return s == string1 or s == string2 
end 

print(isParticular(string1)) -- true 
print(isParticular(randomString)) -- false 

그것을 확인하는 기능을 설정하기 테이블 메서드는 특정 문자열과 다른 문자열 모두에 대해 동일한 시간이 걸리는 것으로 알고 있습니다. 단락 회로 평가 때문에 함수 호출은 string1 시간이 더 걸리고 string2 시간이 더 걸릴 것입니다. 및 randomString.

또한 함수 호출과 테이블 액세스는 약간의 오버 헤드를 유발하는 것으로 알려져 있지만, 단락 회로 평가가 차이를 만들 수 있습니다. (생각보다 느리다는 점에서 특히 2 개 이상의 특정 문자열이 있다고 생각합니다. 대부분의 경우 문자열이 그 중 어느 것과도 일치하지 않을 것입니다).

그래서 어떤 방법을 사용해야합니까?

+0

확실한 한 가지 방법이 있습니다. 둘 다 프로필하십시오! 하지만 차이점을 알 수 있을지는 의문입니다. 체인 연결을 사용하고 싶다면 확인해야 할 항목이 너무 많아서 확장에 대해 걱정할 필요가 없습니다. –

답변

2

해시 테이블 조회는 대형 데이터 집합의 기능적 조회보다 성능이 우수합니다. 첫 번째 방법으로 이동하십시오.

local isParticular = { 
    string1 = true, 
    string2 = true 
} 

print(isParticular[string1]) -- true 
print(isParticular[randomString]) -- nil -> false 
+0

그냥 내가 생각했던 것! 확인해 주셔서 감사합니다. – user6245072