Làm cách nào để sắp xếp một mảng được điền bằng [UIFont familyNames]
vào thứ tự bảng chữ cái?Làm thế nào để sắp xếp một NSArray theo thứ tự bảng chữ cái?
Trả lời
Phương pháp đơn giản nhất là, để cung cấp một selector loại (Apple's documentation để biết chi tiết)
Objective-C
sortedArray = [anArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
Swift
let descriptor: NSSortDescriptor = NSSortDescriptor(key: "YourKey", ascending: true, selector: "localizedCaseInsensitiveCompare:")
let sortedResults: NSArray = temparray.sortedArrayUsingDescriptors([descriptor])
của Apple cung cấp một số chọn lọc dùng cho phân loại tự chữ cái:
compare:
caseInsensitiveCompare:
localizedCompare:
localizedCaseInsensitiveCompare:
localizedStandardCompare:
Swift
var students = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
students.sort()
print(students)
// Prints "["Abena", "Akosua", "Kofi", "Kweku", "Peter"]"
Những câu trả lời khác được cung cấp ở đây đề cập đến sử dụng @selector (localizedCaseInsensitiveCompare :) này hoạt động tuyệt vời cho một mảng của NSString, tuy nhiên nếu bạn muốn mở rộng này để một loại đối tượng, và sắp xếp các đối tượng đó theo thuộc tính 'tên', bạn nên thực hiện việc này thay thế:
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
sortedArray=[anArray sortedArrayUsingDescriptors:@[sort]];
Đối tượng của bạn sẽ được sắp xếp theo thuộc tính tên của các đối tượng đó.
Nếu bạn muốn sắp xếp để được trường hợp nhạy cảm, bạn sẽ cần phải thiết lập các mô tả như thế này
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)];
+1, Cảm ơn bạn. Buồn cười đây là trường hợp sử dụng phổ biến hơn so với câu trả lời được chấp nhận. –
này sắp xếp chữ cái đầu tiên và sau đó chữ cái nhỏ – HarshIT
Tôi đã chỉnh sửa câu trả lời của mình để bao gồm phân loại phân biệt chữ hoa chữ thường –
Một cách mạnh mẽ hơn của sắp xếp một danh sách các NSString sử dụng những thứ như NSNumericSearch:
NSArray *sortedArrayOfString = [arrayOfString sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [(NSString *)obj1 compare:(NSString *)obj2 options:NSNumericSearch];
}];
Kết hợp với SortDescriptor, mà sẽ cung cấp cho một cái gì đó như:
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES comparator:^NSComparisonResult(id obj1, id obj2) {
return [(NSString *)obj1 compare:(NSString *)obj2 options:NSNumericSearch];
}];
NSArray *sortedArray = [anArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];
-(IBAction)SegmentbtnCLK:(id)sender
{ [self sortArryofDictionary];
[self.objtable reloadData];}
-(void)sortArryofDictionary
{ NSSortDescriptor *sorter;
switch (sortcontrol.selectedSegmentIndex)
{case 0:
sorter=[[NSSortDescriptor alloc]initWithKey:@"Name" ascending:YES];
break;
case 1:
sorter=[[NSSortDescriptor alloc]initWithKey:@"Age" ascending:YES];
default:
break; }
NSArray *sortdiscriptor=[[NSArray alloc]initWithObjects:sorter, nil];
[arr sortUsingDescriptors:sortdiscriptor];
}
Xấu xí hình thành phải trung thực – Mutawe
Sử dụng dưới mã cho sắp xếp theo thứ tự chữ cái:
NSArray *unsortedStrings = @[@"Verdana", @"MS San Serif", @"Times New Roman",@"Chalkduster",@"Impact"];
NSArray *sortedStrings =
[unsortedStrings sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"Unsorted Array : %@",unsortedStrings);
NSLog(@"Sorted Array : %@",sortedStrings);
Dưới đây là giao diện điều khiển đăng nhập:
2015-04-02 16:17:50.614 ToDoList[2133:100512] Unsorted Array : (
Verdana,
"MS San Serif",
"Times New Roman",
Chalkduster,
Impact
)
2015-04-02 16:17:50.615 ToDoList[2133:100512] Sorted Array : (
Chalkduster,
Impact,
"MS San Serif",
"Times New Roman",
Verdana
)
Một phương pháp dễ dàng để sắp xếp một mảng của chuỗi bao gồm bằng NSString description
sở hữu theo cách này :
NSSortDescriptor *valueDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"description" ascending:YES];
arrayOfSortedStrings = [arrayOfNotSortedStrings sortedArrayUsingDescriptors:@[valueDescriptor]];
Điều đó có vẻ hơi vô dụng; không có lý do gì để sắp xếp các chuỗi theo cách này (và có thể là một hiệu suất nhấn để làm như vậy), và đối với các đối tượng khác, thuộc tính mô tả của nó hiếm khi hữu ích cho các mục đích sắp xếp. – mah
Điều này đã có câu trả lời hay cho hầu hết purp oses, nhưng tôi sẽ thêm của tôi đó là cụ thể hơn.
Trong tiếng Anh, thông thường khi chúng tôi theo bảng chữ cái, chúng tôi bỏ qua từ "the" ở đầu cụm từ. Vì vậy, "Hoa Kỳ" sẽ được đặt hàng theo "U" chứ không phải "T".
Điều này phù hợp với bạn.
Có lẽ tốt nhất nên đặt các danh mục này vào danh mục.
// Sort an array of NSStrings alphabetically, ignoring the word "the" at the beginning of a string.
-(NSArray*) sortArrayAlphabeticallyIgnoringThes:(NSArray*) unsortedArray {
NSArray * sortedArray = [unsortedArray sortedArrayUsingComparator:^NSComparisonResult(NSString* a, NSString* b) {
//find the strings that will actually be compared for alphabetical ordering
NSString* firstStringToCompare = [self stringByRemovingPrecedingThe:a];
NSString* secondStringToCompare = [self stringByRemovingPrecedingThe:b];
return [firstStringToCompare compare:secondStringToCompare];
}];
return sortedArray;
}
// Remove "the"s, also removes preceding white spaces that are left as a result. Assumes no preceding whitespaces to start with. nb: Trailing white spaces will be deleted too.
-(NSString*) stringByRemovingPrecedingThe:(NSString*) originalString {
NSString* result;
if ([[originalString substringToIndex:3].lowercaseString isEqualToString:@"the"]) {
result = [[originalString substringFromIndex:3] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
}
else {
result = originalString;
}
return result;
}
- 1. Sắp xếp JSON theo thứ tự bảng chữ cái
- 2. Sắp xếp chuỗi Android.xml theo thứ tự bảng chữ cái
- 3. Tôi có thể sắp xếp một NSMutableArray theo thứ tự bảng chữ cái như thế nào?
- 4. Sắp xếp băm theo mảng theo thứ tự bảng chữ cái theo một trường
- 5. Sắp xếp một NSArray theo thứ tự ngược lại
- 6. Sắp xếp một mảng theo thứ tự bảng chữ cái trong C#
- 7. Sắp xếp các ký tự đặc biệt SQLite theo thứ tự bảng chữ cái
- 8. PHP: Cách sắp xếp giá trị của một mảng theo thứ tự bảng chữ cái?
- 9. Làm cách nào để sắp xếp các chuỗi trong NSMutableArray thành thứ tự bảng chữ cái?
- 10. Sắp xếp mảng theo giá trị theo thứ tự bảng chữ cái php
- 11. Danh sách sắp xếp cấu trúc dữ liệu Python theo thứ tự bảng chữ cái
- 12. Làm cách nào để sắp xếp các ký tự của chuỗi theo thứ tự bảng chữ cái?
- 13. Cách sắp xếp theo thứ tự bảng chữ cái một giao diện người dùng JQuery có thể sắp xếp được?
- 14. Sắp xếp NSFetchRequest theo ngày và sau đó theo thứ tự chữ cái
- 15. Eclipse sắp xếp các phương thức theo thứ tự bảng chữ cái
- 16. Sắp xếp danh sách theo thứ tự bảng chữ cái với mô-đun
- 17. Intellij-IDEA: Cách sắp xếp thành viên theo thứ tự bảng chữ cái?
- 18. C# Làm cách nào để sắp xếp các cột trong một bảng dữ liệu thành thứ tự bảng chữ cái?
- 19. Sắp xếp mảng (NSArray) theo thứ tự giảm dần
- 20. Làm cách nào để sắp xếp các dòng mã theo thứ tự bảng chữ cái trong Visual Studio?
- 21. Eclipse có cách nào để sắp xếp theo thứ tự bảng chữ cái trong một vùng văn bản không?
- 22. Wordpress: previous_post_link/next_post_link theo thứ tự bảng chữ cái?
- 23. Tôi làm cách nào để sắp xếp theo thứ tự bảng chữ cái trong một số <textarea>? Sắp xếp JavaScript()?
- 24. Sắp xếp theo thứ tự tùy chỉnh
- 25. Sắp xếp mảng đầu tiên theo chiều dài rồi theo thứ tự bảng chữ cái trong Java
- 26. Làm thế nào để sắp xếp một vector ký tự theo một thứ tự cụ thể?
- 27. Làm thế nào để sắp xếp các thuộc tính HTML theo thứ tự bảng chữ cái trên Visual Studio tự động?
- 28. Cách sắp xếp theo thứ tự bảng chữ cái các giá trị trong hộp nhiều django-admin?
- 29. Sắp xếp các ký tự trong NSString thành thứ tự chữ cái
- 30. cách File.listFiles theo thứ tự bảng chữ cái?
Liên kết tài liệu đã lỗi thời, mẫu mã không thực sự đủ để sắp xếp mảng. localizedCaseInsensitiveCompare: cần được xác định bằng cách nào đó. –
Tôi đã cập nhật liên kết. Cảm ơn bạn đã chỉ ra điều đó. localizedCaseInsensitiveCompare: là một phương thức NSString và phải đủ để sắp xếp một mảng các chuỗi. –
Và điều này có thể dễ dàng áp dụng cho một mảng chứa bất kỳ đối tượng tùy chỉnh nào (không chỉ là NSString). Bạn chỉ cần đảm bảo rằng tất cả các đối tượng bên trong mảng của bạn đã thực hiện thông báo mà bộ chọn đang chỉ định. Sau đó, bên trong thông điệp này, bạn chỉ cần gọi so sánh NSString cho các thuộc tính của đối tượng mà bạn muốn so sánh. – Luka