2010-08-05 2 views
1

값을 조회하는 데 사용하는 배열이 있습니다. 처음 두 값을 사용하여 n 행을 얻습니다. 예를 들어 첫 번째 열에는 2가 있고 두 번째 열에는 7이있는 모든 행이 있습니다. 이 값을 구하는 가장 빠른 방법은 무엇입니까? 지금 값을 얻기 위해 루프를 사용조회를 최적화하는 중

int l = SpreadLookupTable.GetLength(0); 

for (int iCombo = 0; iCombo < l; iCombo++) {       
     bool o = SpreadLookupTable[iCombo, 0] == perWeek 
     && SpreadLookupTable[iCombo, 1] == workDays; 

    if (o) { 
     // do stuff 
    } 
} 

편집 : 그것은 단지 약 60 행이 . 만약 내가 3 개의 중첩 된 배열을 만들어서 처음 2 개 열을 t [2] [7]과 같은 인덱스로 직접 사용할 수 있다면 정말로 필요한 행을 반복 할 것입니다. 그게 더 빠를까요?

테이블 :

private static int[,] SpreadLookupTable = { 
                {2, 7, 1, 0, 0, 1, 0, 0, 0}, 
                {2, 7, 1, 0, 0, 0, 1, 0, 0}, 
                {2, 7, 0, 1, 0, 0, 1, 0, 0},                           
             ... 
                {2, 3, 1, 1, 0, 0, 0, 0, 0}, 
                {2, 3, 1, 0, 1, 0, 0, 0, 0}, 
                {2, 3, 0, 1, 1, 0, 0, 0, 0} 
                }; 
당신은 기준과 일치 iCombo의 색인 목록을 유지할 수

답변

1

테이블이 정적이고 검색 값의 조합을 알고있는 경우 두 검색 검색 값을 모두 해시로 매핑하고 목록이있는 사전을 사용하여 해시를 테이블에 매핑 할 수 있습니다.

검색 값을 알 수없는 경우 다중 레벨 사전 (또는 사전)을 작성하고 동일한 기술을 사용할 수 있습니다.

(Neil N과 편집본을 교차 게시 한 적이 있지만 기본적으로 같은 일반적인 아이디어 버전입니다. 색인을 사전 검색 구조로 처리합니다. 사전 또는 목록의 효율성 향상 여부에 따라 달라집니다. 데이터의 특성.)

+0

내 질문의 '편집'부분에서 내가 말하는 것은 무엇입니까? – Jeroen

+0

Sry, 편집자와 교차 게시했습니다. 나는 너의 편집을 참조하기 위해 나의 대답을 편집했다. – TechNeilogy

+0

감사합니다. 나는 이것에서 매 밀리 세컨드를 짜낼 필요가 있고이 제안은 많은 도움이된다. – Jeroen

1

이 모든 데이터, 이후의 모든 시간을 통해 첫 번째 루프, 당신은 단지 색인을 반복해야 할 것이다 그래서 후에 비교를 건너 뜁니다.

+0

@TechNeilogy가 말하는 것과 비슷합니다. – Jeroen

1

예를 들어 동료 동료가 수행 한 프로젝트에서 여러 열로 구성된 격자보기를 가져 와서 셀을 배열 집합으로 내 보낸 경우를 예로 들었습니다. 새 배열을 사용하여 행을 "A"로 색인화하고 또 다른 새 배열을 사용하여 행을 "B"로 색인화했습니다. 그런 다음 Array1과 Array2의 인덱스 위치가 일치하는 배열을 인덱싱하기 위해 다음 배열을 만듭니다. 그들은 우리의 테스트에서

 bool o = SpreadLookupTable[iCombo, 0] == perWeek 
    && SpreadLookupTable[iCombo, 1] == workDays; 

에서 설정 한 기준을 충족하기 위해 나타나는이 사용하면 다음 마이크로 그러므로 복용, 당신의

if (o) { 
     // do stuff 
    } 

루프에서 사용하는 모든 행을 처리해야 이러한 행을 관리 할 수 ​​있습니다 그것은 애플 리케이션에 의해 작업 시간을 줄여,별로,하지만 우리가 작업 할 수천 행을 가지고 그래서 60 행은 인덱스의 작은 크기에서 더 나은 개선을 보여줄 수 있습니다.

+0

희망이 도움이됩니다! –

+0

좋은 답변입니다. 위의 모든 대답과 편집과 비슷하다고 생각합니다. 내 상황은 비슷하다. 테이블은 수백 또는 수천 번 액세스된다. 그래서 매 밀리 초가 중요합니다. – Jeroen

관련 문제