基于一组超级有序字符串对NSStrings的NSArray进行排序

Abi*_*ain 6 sorting objective-c nsstring nsarray ios

我有一个NSArray包含一些NSString对象.例如:

NSArray *objects = @[@"Stin",@"Foo",@"Ray",@"Space"];
Run Code Online (Sandbox Code Playgroud)

现在我需要根据字符串的顺序对此数组进行排序.

NSArray *sortOrder = @[@"John",@"Foo",@"Space",@"Star",@"Ray",@"Stin"];
Run Code Online (Sandbox Code Playgroud)

所以答案应该是

NSArray *sorted = @[@"Foo",@"Space",@"Ray",@"Stin"];
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

答案: 基于对dasblinkenlight的接受答案,我做了以下,并且它有魅力.

NSMutableArray *objects = @[@"Star",@"Stin",@"Foo",@"Ray",@"Space",@"John"];
NSArray *sortOrder = @[@"John",@"Foo",@"Space",@"Star",@"Ray",@"Stin"];

[objects sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    int index1 = [sortOrder indexOfObject:obj1];
    int index2 = [sortOrder indexOfObject:obj2];

    if (index1 > index2)
        return NSOrderedDescending;
    if (index1 < index2)
        return NSOrderedAscending;
    return NSOrderedSame;
}];
Run Code Online (Sandbox Code Playgroud)

das*_*ght 6

创建NSComparator包含对超集数组的引用,并通过比较调用[superset indexOfObject:str]两个字符串的结果来确定字符串的相对顺序.调用sortedArrayUsingComparator:传递实例NSComparator以获得所需的顺序.