2013-05-23 34 views
5

Tôi có hai mảng. Hãy nói rằng:Sắp xếp một mảng theo thứ tự giống như một mảng khác

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

IQ = 110, 145, 75, 122, 130 

Tôi muốn sắp xếp chúng theo chỉ số IQ. Nói cao nhất đến thấp nhất. Tôi có thể sắp xếp một mảng ... và sau đó tôi quay trở lại và kiểm tra xem vị trí của nó và sau đó sắp xếp lại mảng khác. Có vẻ như phải có cách tốt hơn để làm điều này. Đặc biệt nếu mảng lớn hơn.

Đây là cách tôi đang thực hiện ngay bây giờ.

d1, d2, d3, d4, d5 là biến số IQ của tôi. Tôi sử dụng mảng sortBack để sắp xếp lại một mảng khác theo cùng thứ tự.

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

Tại sao bạn duy trì hai mảng cho điều này. Tốt hơn là nên có một loạt các từ điển có tên và giá trị IQ. Sau đó, bạn có thể tạo một trình phân loại với IQ chính và sắp xếp mảng. Khi bạn có thông tin liên quan, hãy luôn giữ chúng lại với nhau. – Anupdas

+0

Yea, tôi nghĩ rằng đó có thể là cách để đi, nhưng tôi có xu hướng bị nhầm lẫn với các công cụ từ điển. Tôi sẽ xem lại nó một lần nữa. –

+0

Sẽ rất khó khăn nếu bạn không sử dụng từ điển hoặc các đối tượng mô hình tùy chỉnh để giữ cho dữ liệu được cấu trúc. Tôi đã đăng một ví dụ. Hãy xem. – Anupdas

Trả lời

19

Đây sẽ là cách tốt hơn để tạo từ điển cho người dùng. Và sau đó phân loại dựa trên các giá trị cụ thể của họ như IQ, Tên, vv

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

Dude ... Cảm ơn ... !!!! Giúp tôi như quyến rũ ...! – JgdGuy

+0

Cảm ơn sự giúp đỡ của bạn – SampathKumar

+0

Thực ra tôi muốn loại sắp xếp này dựa vào ngày .... Cảm ơn vì đã tiết kiệm thời gian của tôi .... nó hoạt động giống như ma thuật !!!! –

3

Xây dựng một mảng 2ngày với hàng đầu tiên như tên và hàng thứ hai là chỉ số IQ Sắp xếp mảng này theo chỉ số IQ trong thời gian O (nlogn)

Các vấn đề liên quan