第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用sortedArrayUsingDescriptors對NSMutableArray

如何使用sortedArrayUsingDescriptors對NSMutableArray

千巷貓影 2019-08-27 16:29:04
如何使用sortedArrayUsingDescriptors對NSMutableArray進(jìn)行排序?我有一個關(guān)于排序的問題NSMutableArray。我可以使用sortedArrayUsingDescriptors:方法用對象對數(shù)組進(jìn)行排序。比如我有一個NSMutableArray的places,我有一個屬性frequency(int值),我想降序排序上frequency,但我不知道如何正確使用它。我把什么作為鑰匙initWithKey?我的對象place包含:NSString * name;NSString * address;NSString * frequency;NSString * type;NSMutableArray * places;... populate array with objects ...NSSortDescriptor * sortByFrequency =    [[[NSSortDescriptor alloc] initWithKey:@"????????" ascending:NO] autorelease];NSArray * descriptors = [NSArray arrayWithObject:sortByFrequency];NSArray * sorted = [x sortedArrayUsingDescriptors:descriptors];
查看完整描述

3 回答

?
慕神8447489

TA貢獻(xiàn)1780條經(jīng)驗 獲得超1個贊

要對您的對象數(shù)組進(jìn)行排序:

  1. setup NSSortDescriptor- 使用變量名作為設(shè)置描述符進(jìn)行排序的鍵以及要在這些鍵上執(zhí)行的選擇器

  2. 使用NSSortDescriptor您設(shè)置的描述符數(shù)組

  3. 根據(jù)這些描述符對數(shù)組進(jìn)行排序

這里有兩個例子,一個使用NSDictionaryNSString/NSNumber值排序NSNumber,另一個使用自定義類,在兩個NSString字段上排序。

在Cocoa編程主題中按照排序和過濾NSArray對象來查看更多示例和說明。

示例

這是在GNUStep上完成的,它應(yīng)該在Cocoa上運行相同 - 代碼完全一樣 - 當(dāng)我坐在我的Mac前面時我會嘗試:

第一個示例使用NSStringNSNumber值對值進(jìn)行排序NSNumber

NSString * NAME      = @"name";NSString * ADDRESS   = @"address";NSString * FREQUENCY = @"frequency";NSString * TYPE      = @"type";NSMutableArray * array = [NSMutableArray array];NSDictionary * dict;dict = [NSDictionary dictionaryWithObjectsAndKeys:
            @"Alehandro", NAME, @"Sydney", ADDRESS,
            [NSNumber numberWithInt:100], FREQUENCY,
            @"T", TYPE, nil];[array addObject:dict];dict = [NSDictionary dictionaryWithObjectsAndKeys:
            @"Xentro", NAME, @"Melbourne", ADDRESS,
            [NSNumber numberWithInt:50], FREQUENCY,
            @"X", TYPE, nil];[array addObject:dict];dict = [NSDictionary dictionaryWithObjectsAndKeys:
            @"John", NAME, @"Perth", ADDRESS,
            [NSNumber numberWithInt:75],
            FREQUENCY, @"A", TYPE, nil];[array addObject:dict];dict = [NSDictionary dictionaryWithObjectsAndKeys:
            @"Fjord", NAME, @"Brisbane", ADDRESS,
            [NSNumber numberWithInt:20], FREQUENCY,
            @"B", TYPE, nil];[array addObject:dict];

使用帶有頻率字段的描述符對部件進(jìn)行排序,即NSNumber

NSSortDescriptor * frequencyDescriptor =
    [[[NSSortDescriptor alloc] initWithKey:FREQUENCY
                                 ascending:YES] autorelease];id obj;NSEnumerator * enumerator = [array objectEnumerator];while ((obj = [enumerator nextObject])) NSLog(@"%@", obj);NSArray * descriptors =
    [NSArray arrayWithObjects:frequencyDescriptor, nil];NSArray * sortedArray =
    [array sortedArrayUsingDescriptors:descriptors];NSLog(@"\nSorted ...");enumerator = [sortedArray objectEnumerator];while ((obj = [enumerator nextObject])) NSLog(@"%@", obj);

輸出 - 按頻率字段排序:

2009-12-04 x[1] {address = Sydney; frequency = 100; name = Alehandro; type = T; }2009-12-04 x[1] {address = Melbourne; frequency = 50; name = Xentro; type = X; }2009-12-04 x[1] {address = Perth; frequency = 75; name = John; type = A; }2009-12-04 x[1] {address = Brisbane; frequency = 20; name = Fjord; type = B; }2009-12-04 x[1]Sorted ...2009-12-04 x[1] {address = Brisbane; frequency = 20; name = Fjord; type = B; }2009-12-04 x[1] {address = Melbourne; frequency = 50; name = Xentro; type = X; }2009-12-04 x[1] {address = Perth; frequency = 75; name = John; type = A; }2009-12-04 x[1] {address = Sydney; frequency = 100; name = Alehandro; type = T; }


第二個示例使用自定義類并對兩個NSString變量進(jìn)行排序。

要排序的數(shù)組(參見A底部的類):

NSMutableArray * array = [NSMutableArray array];[array addObject:[[A alloc] initWithFirstName:@"Alehandro"
                                     lastName:@"Xentro"
                                          age:[NSNumber numberWithInt:40]]];[array addObject:[[A alloc] initWithFirstName:@"John"
                                     lastName:@"Smith"
                                          age:[NSNumber numberWithInt:30]]];[array addObject:[[A alloc] initWithFirstName:@"John"
                                     lastName:@"Smyth"
                                          age:[NSNumber numberWithInt:25]]];[array addObject:[[A alloc] initWithFirstName:@"Torro"
                                     lastName:@"Ola"
                                          age:[NSNumber numberWithInt:45]]];[array addObject:[[A alloc] initWithFirstName:@"Alehandro"
                                     lastName:@"Bento"
                                          age:[NSNumber numberWithInt:41]]];[array addObject:[[A alloc] initWithFirstName:@"Alehandro"
                                     lastName:@"Axel"
                                          age:[NSNumber numberWithInt:41]]];

排序部分,在lastName上排序,然后是firstName:

NSString * LASTNAME = @"lastName";NSString * FIRSTNAME = @"firstName";NSSortDescriptor *lastDescriptor =
    [[[NSSortDescriptor alloc]
        initWithKey:LASTNAME
          ascending:YES
           selector:@selector(localizedCaseInsensitiveCompare:)] autorelease];NSSortDescriptor *firstDescriptor =
    [[[NSSortDescriptor alloc]
        initWithKey:FIRSTNAME
          ascending:YES
           selector:@selector(localizedCaseInsensitiveCompare:)] autorelease];NSArray * descriptors =
   [NSArray arrayWithObjects:lastDescriptor, firstDescriptor, nil];NSArray * sortedArray =
   [array sortedArrayUsingDescriptors:descriptors];

打印結(jié)果:

NSLog(@"\nSorted ...");enumerator = [sortedArray objectEnumerator];while ((obj = [enumerator nextObject])) NSLog(@"%@", obj);

結(jié)果(排序前后):

2009-12-04 00:52:16.637 x[11375] Alehandro, Xentro, age:402009-12-04 00:52:16.644 x[11375] John, Smith, age:302009-12-04 00:52:16.644 x[11375] John, Smyth, age:252009-12-04 00:52:16.644 x[11375] Torro, Ola, age:452009-12-04 00:52:16.645 x[11375] Alehandro, Bento, age:412009-12-04 00:52:16.645 x[11375] Alehandro, Axel, age:412009-12-04 00:52:16.645 x[11375]Sorted ...2009-12-04 00:52:16.645 x[11375] Alehandro, Axel, age:412009-12-04 00:52:16.645 x[11375] Alehandro, Bento, age:412009-12-04 00:52:16.645 x[11375] Torro, Ola, age:452009-12-04 00:52:16.645 x[11375] John, Smith, age:302009-12-04 00:52:16.645 x[11375] John, Smyth, age:252009-12-04 00:52:16.645 x[11375] Alehandro, Xentro, age:40

課程A延伸NSObject- 這里沒什么特別的:

#import <Foundation/Foundation.h>@interface A : NSObject{
    NSString * firstName;
    NSString * lastName;
    NSNumber * age;}- (id)initWithFirstName:(NSString*)aFirstName
               lastName:(NSString*)aLastName
                    age:(NSNumber*)anAge;-(NSString* )description;+(NSString*)action;@end

執(zhí)行:

#import <Foundation/Foundation.h>#import "A.h"@implementation A- (id)init{
    return [self initWithFirstName:@"N/A"
                          lastName:@"N/A"
                               age:0];}- (id)initWithFirstName:(NSString*)aFirstName
               lastName:(NSString*)aLastName
                    age:(NSNumber*)anAge{
    self = [super init];
    if (!self) return nil;

    firstName = [aFirstName copy];
    lastName = [aLastName copy];
    age = [anAge copy];

    return self;}- (void)dealloc{
    [firstName release];
    [lastName release];
    [age release];
    [super release];}

- (NSString *) description{
    return [NSString stringWithFormat: @"%@, %@, age:%@",
                                       firstName, lastName, age];}@end


查看完整回答
反對 回復(fù) 2019-08-27
?
慕尼黑8549860

TA貢獻(xiàn)1818條經(jīng)驗 獲得超11個贊

“鍵”是對象的方法(數(shù)組“x”的元素),它返回要排序的對象。所以在這種情況下,你說你想按“頻率”排序。然后,您所要做的就是使用返回頻率的方法的名稱作為鍵。


查看完整回答
反對 回復(fù) 2019-08-27
?
慕虎7371278

TA貢獻(xiàn)1802條經(jīng)驗 獲得超4個贊

以下是對NSMutableArray進(jìn)行排序的方法:

NSMutableArray *numberSort =[[NSMutableArray alloc] init];

    while ((key = [enumerator nextObject])) {
        //(NSNumber *)integer = [key integerValue];
        [numberSort  addObject:[NSNumber numberWithInt:[key intValue]]];
        // code that uses the returned key 
    }


    NSArray *stringSort = [numberSort sortedArrayUsingSelector:@selector(compare:)];
    enumerator = [stringSort objectEnumerator];
    NSNumber  *intKey;

    NSMutableArray *backToString =[[NSMutableArray alloc] init];

    while ((intKey = [enumerator nextObject])) {
        //(NSNumber *)integer = [key integerValue];
        [backToString  addObject:[intKey stringValue]];
        // code that uses the returned key


查看完整回答
反對 回復(fù) 2019-08-27
  • 3 回答
  • 0 關(guān)注
  • 823 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號