2013-05-23 2 views
5

두 배열이 있습니다. 의가 있다고 가정 해 봅시다 :배열을 다른 배열과 같은 순서로 정렬합니다.

array = "Dave", "Mike", "Joe", "Jason", "Kevin" 

IQ = 110, 145, 75, 122, 130 

내가 IQ별로 정렬하고 싶습니다. 가장 높은 곳에서 가장 낮은 곳으로 말하십시오. 하나의 배열을 정렬 할 수 있습니다. 그런 다음 다시 돌아가서 배열의 위치를 ​​확인한 다음 다른 배열을 다시 배열합니다. 이것을하기위한 더 좋은 방법이있는 것처럼 보입니다. 특히 배열이 커지면.

내가 어떻게하는지 지금 여기 있습니다.

d1, d2, d3, d4, d5은 내 IQ입니다. sortBack 배열을 사용하여 다른 배열을 같은 순서로 재정렬합니다.

NSMutableArray *myArray = [NSMutableArray arrayWithObjects:[NSString stringWithFormat:@"%d",d1], [NSString stringWithFormat:@"%d",d2],[NSString stringWithFormat:@"%d",d3], [NSString stringWithFormat:@"%d",d4],[NSString stringWithFormat:@"%d",d5], nil]; 

//sorting 
[myArray sortUsingComparator:^NSComparisonResult(NSString *str1, NSString *str2) { 
    return [str1 compare:str2 options:(NSNumericSearch)]; 
}]; 

for(int i=0;i<5;i++) 
{ 
    if([[myArray objectAtIndex:i] integerValue]==d1) 
    { 
     sortBackArray[i]=1; 
    } 
    else if([[myArray objectAtIndex:i] integerValue]==d2) 
    { 
     sortBackArray[i]=2; 
    } 
    else if([[myArray objectAtIndex:i] integerValue]==d3) 
    { 
     sortBackArray[i]=3; 
    } 
    else if([[myArray objectAtIndex:i] integerValue]==d4) 
    { 
     sortBackArray[i]=4; 
    } 
    else if([[myArray objectAtIndex:i] integerValue]==d5) 
    { 
     sortBackArray[i]=5; 
    } 
} 
+6

왜 두 개의 배열을 유지 관리하고 있습니까? 이름과 IQ 값으로 사전을 배열하는 것이 좋습니다. 그런 다음 키 IQ로 sortDescriptor를 작성하고 배열을 정렬 할 수 있습니다. 관련 정보가 있으면 항상 함께 보관하십시오. – Anupdas

+0

네, 그게 길일지도 모른다고 생각했지만, 사전과 혼동하는 경향이 있습니다. 다시 한번 살펴 보겠습니다. –

+0

데이터를 구조화하기 위해 사전이나 사용자 정의 모델 객체를 사용하지 않으면 매우 어려울 것입니다. 나는 예제를 게시했다. 보세요. – Anupdas

답변

19

이것은 사용자를위한 사전을 만드는 좋은 방법입니다. 그리고 IQ 등의 특정 값에 기초하여 정렬 이름 등

NSArray *users = @[@"Dave",@"Mike",@"Joe",@"Jason",@"Kevin"]; 
NSArray *iqs = @[@110,@145,@75,@122,@130]; 

NSMutableArray *array = [NSMutableArray array]; 
for (int idx = 0;idx<[users count];idx++) { 
    NSDictionary *dict = @{@"Name": users[idx],@"IQ":iqs[idx]}; 
    [array addObject:dict]; 
} 

NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"IQ" ascending:NO]; 
[array sortUsingDescriptors:@[descriptor]]; 
+0

야 ... 고마워 ... !!!! 매력이 나를 도왔다 ...! – JgdGuy

+0

당신의 도움에 감사드립니다 – SampathKumar

+0

사실 나는 날짜에 기초한 이런 종류의 정렬을 원합니다 .... 내 시간을 절약 해 주셔서 감사합니다 .... 그것은 마법처럼 작동합니다 !!!! –

3

이 배열 O (nlogn)의 IQ

에 따른 IQ 일종의 이름과 두 번째 행 등의 첫 번째 행과 2 차원 어레이를 구축
관련 문제