【问题标题】:Sorting NSMutableArray contains NSMutableString in Objective C在Objective C中排序NSMutableArray包含NSMutableString
【发布时间】:2014-02-14 03:29:16
【问题描述】:

新手问题,

我正在使用包含卡片元素(姓名和电子邮件地址)的 NSMutableArray *myBook。

我希望 myBook 以降序显示。

地址簿.h

#import <Foundation/Foundation.h>
#import "AddressCard.h"
@interface AddressBook : NSObject

@property (nonatomic, copy) NSMutableString *bookName;

@property (nonatomic , strong) NSMutableArray *book;

地址卡.h

#import <Foundation/Foundation.h>

@interface AddressCard : NSObject

@property (nonatomic, copy) NSMutableString *name, *email;

地址簿.m

- (void) sort{
    [book sortUsingSelector:@selector(compareNames:)];
}

- (void) showList{

    NSLog(@"====== Contents of: %@ =======",bookName);


    for (AddressCard *theCard in book) {
        NSLog(@"%-20s    %-32s", [theCard.name UTF8String], [theCard.email UTF8String] );
    }

    NSLog(@"===============================");
}

地址卡.m

- (NSComparisonResult) compareNames: (id) element{


    return [name compare:[element name]];
}

我的 CompareNames 方法返回升序结果。如何让它返回降序?

谢谢!

【问题讨论】:

  • 试试return [self.name compare:[element name]];
  • @rmaddy 没用。
  • 啊,根据接受的答案,我误解了你的问题。你的排序正好相反。

标签: ios objective-c nsmutablearray nsmutablestring


【解决方案1】:

虽然- (void)sortUsingSelector:(SEL)comparator 方法假设按升序对数组的元素进行排序,但如果数组小于参数,比较器方法应该返回NSOrderedAscending,如果数组大于参数,则返回NSOrderedDescending,以及@987654324 @如果它们相等。

由于 NSComparisonResult 定义为:

enum {
   NSOrderedAscending = -1,
   NSOrderedSame,
   NSOrderedDescending
};

typedef NSInteger NSComparisonResult;

您只需要一个descendingComparator,例如:

- (NSComparisonResult)compareNameInDesendingOrder:(AddressCard *)aCard {
    return -[self.name compare:[aCard name]];
}

- (void)sortInDesendingOrder {
    [book sortUsingSelector:@selector(compareNameInDesendingOrder:)];
}

希望对你有帮助。

【讨论】:

  • 或者反向比较:return [aCard.name compare:self.name];.
  • @lancy 我更改了方法 compareNames: 以将 (AddressCard *) aCard 作为参数,并且它起作用了。这比使用 (id) 元素作为参数真的可以接受吗?
  • @user3213703 ,id 工作正常,我喜欢静态类型检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-01
  • 1970-01-01
  • 2013-05-26
相关资源
最近更新 更多