2009-04-14 34 views
-1

我有一些名字的對象,就像button 1 , button 2 , button 11 ,button 111,我想通過這個順序將這個對象添加到數組中:button 1 ,button 2 , button 11 , button 111,但是我發現這些對象可以通過以下順序添加數組:button 1 , button 11,button 111 , button 2 .why?謝謝您的回答!如何通過這個順序將這些具有名稱的對象添加到數組中?

回答

-1

如果你在Finder中有這個名字的文件,他們會以相同的方式排序。

得到你需要他們的名字按鈕001,按鈕002,按鈕011正確排序等

或者,你必須寫自己的排序描述符。

在這裏看到NSMutableArray sortUsingSelector:並在這裏爲您的排序比較NSSortDescriptor

+1

實際上,搜索器總是用適當的數字在Mac OS X中排序。它是CF和Cocoa排序選項之一。只有在Mac OS中才會按ASCII順序排序。 – 2009-04-14 03:27:59

1

您可以使用此代碼對數組進行排序。使用NSNumericSearch來搜索字符串中的數字值。

NSArray * ary = [[NSArray alloc] initWithObjects:@"button 1" , @"button 2" , @"button 11" ,@"button 111", nil]; 

ary = [ary sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { 
     return [(NSString *)obj1 compare:(NSString *)obj2 options:NSNumericSearch]; 
    }]; 

NSLog(@"ary : %@", ary); 

和日誌顯示:

ary : (
"button 1", 
"button 2", 
"button 11", 
"button 111" 
) 
1

我已經使用了NSNumericSearch | NSCaseInsensitiveSearch組合,以獲得最好的結果。我希望有人能夠將他們的一生攢下來。檢查結果。

NSArray * array = 
    [NSArray 
    arrayWithObjects: 
     [NSDictionary dictionaryWithObject: @"C3" forKey: @"sort"], 
     [NSDictionary dictionaryWithObject: @"C1" forKey: @"sort"], 
     [NSDictionary dictionaryWithObject: @"C100" forKey: @"sort"], 
     [NSDictionary dictionaryWithObject: @"Z0" forKey: @"sort"], 
     [NSDictionary dictionaryWithObject: @"Z1000" forKey: @"sort"], 
     [NSDictionary dictionaryWithObject: @"M" forKey: @"sort"], 
     [NSDictionary dictionaryWithObject: @"m" forKey: @"sort"], 
     [NSDictionary dictionaryWithObject: @"M" forKey: @"sort"], 
     [NSDictionary dictionaryWithObject: @"m" forKey: @"sort"], 
     [NSDictionary dictionaryWithObject: @"1A4" forKey: @"sort"], 
     [NSDictionary dictionaryWithObject: @"A2" forKey: @"sort"], 
     [NSDictionary dictionaryWithObject: @"A12" forKey: @"sort"], 
     [NSDictionary dictionaryWithObject: @"B4" forKey: @"sort"], 
     [NSDictionary dictionaryWithObject: @"B6" forKey: @"sort"], 
     [NSDictionary dictionaryWithObject: @"B100" forKey: @"sort"], 
     [NSDictionary dictionaryWithObject: @"B1" forKey: @"sort"], 
     [NSDictionary dictionaryWithObject: @"1a4" forKey: @"sort"], 
     nil]; 

    NSSortDescriptor * descriptor = 
    [NSSortDescriptor 
    sortDescriptorWithKey: @"sort" 
    ascending: YES 
    comparator: 
    ^NSComparisonResult(id obj1, id obj2) 
    { 
     return [obj1 compare: obj2 options: NSNumericSearch|NSCaseInsensitiveSearch]; 
    }]; 

    NSArray * sortedArray = 
    [array 
    sortedArrayUsingDescriptors: 
    [NSArray arrayWithObject: descriptor]]; 

NSLog(@"Original array:"); 


for(NSDictionary * value in array) 
    NSLog(@"%@", [value objectForKey: @"sort"]); 

NSLog(@"Sorted array:"); 

for(NSDictionary * value in sortedArray) 
    NSLog(@"%@", [value objectForKey: @"sort"]); 

結果

原始陣列:

C3 
    C1 
    C100 
    Z0 
    Z1000 
    M 
    m 
    M 
    m 
    1A4 
    A2 
    A12 
    B4 
    B6 
    B100 
    B1 
    1a4 

排序後的數組:

1A4 
    1a4 
    A2 
    A12 
    B1 
    B4 
    B6 
    B100 
    C1 
    C3 
    C100 
    M 
    m 
    M 
    m 
    Z0 
    Z1000 
相關問題