2012-04-26 6 views
3

나는 TDictionary가 있습니다. 광범위한 루프로 가득 차 있습니다. 루프가 완료되면 더 많은 점수 (정수)로 10 개의 키 (문자열)를 검색해야합니다. 이것을 달성하는 가장 효율적인 방법은 무엇입니까?제네릭 컬렉션 위에서 아래로 반복 (TDictionary)

NSArray *top_words_sorted_array = [top_words_dictionary keysSortedByValueUsingSelector:@selector(compare:)]; 

다음 새 정렬 된 배열을 반복 : 오브젝티브 C (코코아) 내가 함께 할에서

. 델파이에서 어떻게 할 수 있습니까?

답변

5

코코아 코드에 해당하는 델파이 코드는 다음과 같습니다 당신의 사전이 매우 큰

type 
    TScorePair = TPair<string,Integer>; 
var 
    ScoresArray: TArray<TScorePair>; 
.... 
ScoresArray := Scores.ToArray; 
TArray.Sort(ScoresArray, 
    TComparer<TScorePair>.Construct( 
    function(const L, R: TScorePair): Integer 
    begin 
     Result := R.Value - L.Value; 
    end 
) 
); 

경우이 가장 효율적인 해결책이 될 수 없습니다. 다른 한편으로, 그것은 아마도 가장 빠르고 쉬운 접근 방법 일 것입니다.

+0

데이빗 감사합니다! 원래 Obj-C 코드만큼이나 효율적입니다. 사전은 커지지 만이 코드 사용은 빈번하지 않습니다. –

+1

사전이 너무 큰 경우 전체 값 목록을 정렬하지 않을 수 있습니다. * 부분 정렬 만하면됩니다. 위키피디아의 * 선택 알고리즘 * 항목을 참조하십시오. [가장 작은 또는 가장 큰 요소 선택] (http://en.wikipedia.org/wiki/Selection_algorithm#Selecting_k_smallest_or_largest_elements) –

+0

TArray 에는 언제 Sort 메서드가 있습니까? –

0

맵 (사전)으로 액세스해야합니까, 아니면 일반 배열로 충분합니까?

지도가 있어야하는 경우 DeHL.Collections을보고 싶습니다. 아마도 DeHL.Collections.DoubleSortedBidiMap이 필요합니다. 프로젝트 페이지에 생산이 중단되었지만 매일 사용하고 문제가없는 것으로 나타났습니다.

+0

강력한 콜렉션 라이브러리가있는 http://code.google.com/p/delphi-spring-framework/을보고 싶을 수도 있습니다. 적극적으로 개발 된 –

+0

* DeHL 작성자가 공동 작업하고 있다고 생각합니다. 그곳에. –

+0

Paul은 그에게 커밋 권한을주었습니다. 그러나 올바르게 기억한다면 Alex는 내가 알고있는 어떤 형태로든 활약하지 못했습니다. –

관련 문제