1

NSArray並べ替え順序として使用したい文字列があります。

NSArray *permissionTypes = [NSArray arrayWithObjects:@"Read", @"Write", @"Admin", nil];

次に、NSMutableArrayこれら3つのアクセス許可タイプすべてを持っている場合と持っていない場合がありますが、2つしかない場合もありますが、配列に基づいて並べ替えたい場合もありpermissionsTypesます。

NSMutableArray *order = [NSMutableArray arrayWithArray:[permissions allKeys]];

配列をキーとしてorder使用することに基づいて、配列を常に正しく並べ替えるにはどうすればよいですか?permissionTypes

4

4 に答える 4

3
NSMutableArray *sortDescriptors = [NSMutableArray array]; 

for (NSString *type in permissionTypes) {
    NSSortDescriptor *descriptor = [[[NSSortDescriptor alloc] initWithKey:type ascending:YES] autorelease];

    [sortDescriptors addObject:descriptor];
}

sortedArray = [myArray sortedArrayUsingDescriptors:sortDescriptors];
于 2012-12-03T09:14:18.217 に答える
3

これについては、アクセス許可タイプを保持するための構造体またはオブジェクトを作成します。

その後、あなたは持つことができます...

PermissionType
--------------
Name: Read
Order: 1

PermissionType
--------------
Name: Write
Order: 2

等々。

次に、これらのオブジェクトの実際の配列のみが必要であり、順序値で並べ替えることができます。

[array sortUsingComparator:^NSComparisonResult(PermissionType *obj1, PermissionType *obj2) {
        return [obj1.order compare:obj2.order];
    }];

これにより、順序フィールドで配列が並べ替えられます。

于 2012-12-03T09:07:21.560 に答える
0

好みの並べ替え方法NSMutableArrayを使用して、2つの要素を比較するために使用するブロックまたはセレクターを提供します。そのブロック/セレクターでは、渡された2つの文字列を直接比較するのではなく、permissionTypesを使用して配列内のそれぞれを検索しindexOfObject:、返された結果のインデックス値を比較します。

于 2012-12-03T09:11:33.403 に答える
0

私はあなたに別のアプローチを提案します:

- (void)viewDidLoad
{
[super viewDidLoad];

arrayPermissions = [[NSMutableArray alloc] init];


NSDictionary *dicRead = [NSDictionary dictionaryWithObjectsAndKeys:
                              @"Read", @"Permission", nil];

NSDictionary *dicWrite = [NSDictionary dictionaryWithObjectsAndKeys:
                               @"Write", @"Permission", nil];

NSDictionary *dicAdmin = [NSDictionary dictionaryWithObjectsAndKeys:
                              @"Admin", @"Permission", nil];

NSLog(@"my dicRead = %@", dicRead);
NSLog(@"my dicWrite = %@", dicWrite);
NSLog(@"my dicAdmin = %@", dicAdmin);

[arrayPermissions addObject:dicRead];
[arrayPermissions addObject:dicWrite];
[arrayPermissions addObject:dicAdmin];

NSLog(@"arrayPermissions is: %@", arrayPermissions);

// create a temporary Dict again

NSDictionary *temp =[[NSDictionary alloc]
                     initWithObjectsAndKeys: arrayPermissions, @"Permission", nil];

// declare one dictionary in header class for global use and called "filteredDict"
self.filteredDict = temp;

self.sortedKeys =[[self.filteredDict allKeys]
                  sortedArrayUsingSelector:@selector(compare:)];


NSLog(@"sortedKeys is: %i", sortedKeys.count);
NSLog(@"sortedKeys is: %@", sortedKeys);

}

助けを願っています

于 2013-04-18T14:56:20.863 に答える