다음과 같이 정의 된 Excel 범위 개체 (아니요, 협상 가능하지 않음) 인 키가있는 사전이 있습니다 (CellProp 형식은 다양한 셀을 포함하는 개체입니다) 속성) :VB.NET에서 오버로드 같음/GetHashCode를 사용하여 사전 키로 개체 사용
Dim dic As New Dictionary(Of Excel.Range, CellProp)(New RangeComparer())
키가 개체이기 때문에 Equals/GetHashCode 함수를 오버로드해야합니다. 현재 구현은 다음과 같습니다.
그러나 사전에 여러 셀 (예 : 수백)을 한꺼번에 추가하면 실행 속도가 매우 느려질 수 있습니다. 가장 중요한 것은이를 수행하는 더 빠른 방법이 있습니까? 2 차적으로 Range의 Count 속성에 대한 해시 코드를 가져 오는 것이 왜 (천천히) 작동하는 것일까 요?
감사합니다. 그 두 번째 질문을 해결합니다. 난 그 속도가 같음 함수를 오버로드에서 오는 것 같아요. 그 속도를 높이는 방법에 대한 아이디어가 있습니까? "Return x Is y"와 같은 무언가가 효과가있을 것이라고 생각했을 지 모르지만 그렇지 않습니다. – OfficeAddinDev
더 나은'GetHashCode' 알고리즘을 사용하면'Equals' 메쏘드는 해쉬 콜리 전의 경우에만'Equals'가 필요하기 때문에 훨씬 덜 자주 호출되어야합니다. 사실,'x.Address (External : = True)'가 매우 느린 연산이라면 모든 범위에 대해 미리 계산할 수있는 방법을 찾고 싶을 것입니다. – mellamokb
@Ryan :이 솔루션을 사용하면 주소 식별로 범위 ID를 정의하므로 코드에서 동등하게 'Dictionary (Of String, CellProp)'를 사용할 수 있습니다. 여기서 dic.Add (range : Address : True), cellProp)'dic.Add (range, cellProp)'가 아니라. 나는 사전의 유형이 협상 적이 아님을 알지만, 그래도 그럼에도 불구하고 지적 할만한 가치가 있다고 생각합니다. – phoog