2010-03-21 9 views
2

인덱스 목표 - C,내가 예를 들어 배열이

Array { 
    3.0 at Index 0 
    2.0 at Index 1 
    3.5 at Index 2 
    1.0 at Index 4 
} 
을 잃지 않고 오름차순으로 배열을 정렬 내가 좋아하는, 처음에 인덱스를 잃지 않고 정렬이 오름차순을 좀하고 싶습니다

이것은

Array { 
    1.0 at Index 4 
    2.0 at Index 1 
    3.0 at Index 0 
    3.5 at Index 2 
} 

나는

NSArray *sortedArray = [hArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; 
[knnRecog sortUsingDescriptors:[NSArray arrayWithObject:sortAsc]]; 

내가 인덱스를 잃고,이를 사용하여 배열을 정렬합니다. 누구든지 배열을 정렬 한 후 인덱스를 보존하는 방법을 알고 있습니까? 감사합니다

+0

는 소리 배열의 단일 값 ... – miorel

답변

2

기본 데이터 구조를 변경하면 필요한 정렬 작업을 수행 할 수 있습니다.

 
{ 
    {3.0, Index 0}, 
    {2.0, Index 1}, 
    {3.5, Index 2}, 
    {1.0, Index 4} 
} 

주어진 정렬 기능을 : 예를 들어, 배열의 배열의 사용을 고려

NSComparisonResult customCompareFunction(NSArray* first, NSArray* second, void* context) 
{ 
    id firstValue = [first objectAtIndex:0]; 
    id secondValue = [second objectAtIndex:0]; 
    return [firstValue compare:secondValue]; 
} 

당신은 너무처럼 정렬 할 수 있습니다

NSArray* myArray = [NSArray arrayWithObjects: 
        [NSArray arrayWithObjects: 
        [NSNumber numberWithFloat:3.0f], 
        [NSNumber numberWithInt:0], nil], 
        [NSArray arrayWithObjects: 
        [NSNumber numberWithFloat:2.0f], 
        [NSNumber numberWithInt:1], nil], 
        [NSArray arrayWithObjects: 
        [NSNumber numberWithFloat:3.5f], 
        [NSNumber numberWithInt:2], nil], 
        [NSArray arrayWithObjects: 
        [NSNumber numberWithFloat:1.0f], 
        [NSNumber numberWithInt:4], nil]]; 

NSArray* sortedArray = [myArray sortedArrayUsingFunction:customCompareFunction context:NULL]; 

NSLog(@"Sorted array: %@", sortedArray); 

인쇄 어느 :

정렬 된 배열 : ( ( 1, 4사용자가 아닌 값의 쌍을 저장할 같이 6,) () () ( 3.5) )

1

정렬은 새 정렬 순서를 생성하기 위해 인덱스를 바꿔주는 것만 큼 정렬이기 때문에 배열을 정렬하고 초기 인덱스를 유지할 수 없습니다. 정렬은 항상 색인을 변경합니다.

실제로 원하는 것은 처음 배열의 인덱스를 데이터로 변환 한 다음이를 초기 배열의 데이터와 함께 realtion에 저장하는 것입니다.

그렇다면 사전 배열이 필요합니다. 사전은 그 인덱스의 값과 사전에 원래의 단일 인덱스 관련해야

NSDictionary *anElement=[NSDictionary dictionaryWithObject:[intialArray objectAtIndex:i] forKey:[NSNumber numberWithInt:i]]; 

나서 보관하는 어레이에 각각 사전을 추가한다. 그런 다음 원래 배열의 관계를 잃지 않고 원하는대로 배열을 정렬 할 수 있습니다 (사전에 대한 조건부 사용).

+0

+1 사전 배열은이를 달성하는 올바른 방법입니다. 주위에 머리를 얻는 데 몇 분이 걸리지 만 가치가 있습니다. 그런 다음 사전 배열 배열을 사용해보십시오! ... – h4xxr