2011-06-20 51 views
1

我在這裏有兩個數組是從另一個類和一個我創建的函數中,我的最終目標是讓teamRoster按字母順序排序,這似乎工作,但有人可以告訴我,如果有更好的方法嗎?謝謝。這是設置客觀C數組等於另一個的最佳方式嗎?

-(IBAction)submitAndSendBack:(id)sender{ 
     CoCoachAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 

     NSString *fullName = [ NSString stringWithFormat:@"%@ %@",firstName.text, lastName.text]; 
     [[appDelegate teamRoster] addObject:fullName]; 
     NSArray *temp = [[appDelegate teamRoster] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; 

     [[appDelegate teamRoster] removeAllObjects]; 
     [[appDelegate teamRoster] addObjectsFromArray:temp]; 


     NSLog(@"%@", [appDelegate teamRoster]); 

     [ap 

pDelegate.navigationController popViewControllerAnimated:YES]; 
} 
+0

是否要在正確的有序位置插入新的全名?而不是使用插入的新的全名重新排列整個數組。這是真正優化的,如果您正在討論數組中的數百或數千個元素,則可以先用二進制搜索確定位置,然後插入該位置。 –

回答

1

有沒有更好的方法?取決於你的意思是「更好」。

您的代碼正確且容易理解。

假設teamRosterNSMutableArray類型的屬性,你可以簡單地在適當的位置排序:

[[appDelegate teamRoster] sortUsingSelector:@selector(caseInsensitiveCompare:)]; 

但也有可能是理由不這樣做的,說性能或併發。

另一方面,您可能想要保護teamRoster數組免受應用程序委託之外的代碼修改,在這種情況下,您應該只將其作爲不可變的NSArray提供,並且您無法用上面的方法對它進行排序。

0

試試這個:

appDelegate.teamRoster = [[temp mutableCopy] autorelease]; 

這是假設你有一個屬性的設置,允許你改變teamRoster。

0

這個怎麼樣?

NSArray *temp = [[appDelegate teamRoster] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; 
[appDelegate setTeamRoster:temp]; 

如果您的應用程序委託有teamRoster設置爲一個屬性,二傳手會讓你取代舊的陣列,而無需將其清空,並填充它。