2012-04-05 4 views
0

이 다음 키 값으로로드되는 사전 개체 : 189a 189b 189c 201A 대부분의 상황에서 (201B)사전 객체에서 키 값의 일부만 찾는 방법이 있습니까?

, 독특한 인생은 좋은 및 모든 개별 키 값이 필요하다/. 그러나 특정 상황에서, 뒤에있는 문자가있는 키 (즉, ... 189a, 189b, 189c)는 모두 같은 것을 의미합니다 (즉, ... 189). 그래서 열쇠의 첫 부분에 대해서만 key 값이 존재하는지 (containskey 메소드와 같은) 있는지 확인한 다음 true를 리턴 할 수있는 방법이 필요합니다.
이 작업을 수행하는 방법에 대한 아이디어가 있으십니까?

+0

룩업은 처음에는 해시 테이블의 모든 목적을 무력화시키는 'O (n)'입니다. –

+0

또는 vb.net이 상대적으로 개체 지향적 인 경우 키에 사용할 클래스를 만들고 해시 및 같음 메서드를 적절히 정의하여 189a, 189b 및 189c가 모두 "동일"하도록 할 수 있습니다. –

+0

@MikeChristensen 조회의 빈도 및 특성에 따라 큰 문제는 아닐 수도 있습니다. 특정 형식의 키에 대한 존재 확인이 해당 컬렉션을 정기적으로 사용한다는 것이 확실하지 않습니다. 그렇지 않은 경우, 해쉬되지 않은 세트를 사용하는 것이 완전히 합법적 일 수 있습니다. – PinnyM

답변

1

이와 비슷한?

dictionary.Keys.Any(Function(key) key.StartsWith("189")) 

또는 더 발견 세밀한 제어를위한 정규식을 사용할 수 있습니다 만 때때로 접미사 편지를 무시 필요하기 때문에

dictionary.Keys.Any(Function(key) Regex.IsMatch(key, "^189[^\d]?") 
+0

이 질문에'VB.Net' 태그가 붙어 있습니다. –

+0

오른쪽으로 업데이트되었습니다. – PinnyM

+0

실제로는 아주 잘 작동합니다. 내가 예측할 수있는 유일한 문제는 사전에 "1891"의 값이 포함 된 경우 거짓 긍정을 유발한다는 것입니다. 마지막에 편지를 걸러내는 것이 좋을까요? 그 숫자의 끝에는 단 하나의 문자 만 가능하기 때문에 (또는 전혀 문자가 없기 때문에)? – user1070202

1

는 가장 큰 효율성을 위해, 나는 추가를 사용하는 것이 좋습니다 HashSet(T) 숫자 부분을 저장합니다. 사전에 요소를 추가/제거 할 때는 HashSet(T)에서 숫자를 추가/제거하십시오. HashSet(T).Contains 메서드는 O (1)이므로 요소가 있는지 확인하는 것이 빠릅니다.

관련 문제