0

NSString *プロパティ ( ) の 1 つを ( ) の別の配列内のオブジェクト (既にソートされている)と比較することによって、オブジェクトの配列をソートするにはどうすればよいNSString *でしょうか?

たとえば、多数のスレッドがたまたま完了する順序でオブジェクトの配列を埋めます。次に、それぞれを、既に順序付けられている名前オブジェクトの配列とPerson比較したいと思います。Person.name結果はPerson、names 配列と同じ順序でperson.nameプロパティによってソートされた配列になります。

4

2 に答える 2

1

これに似たものを試すことができますが、これは私が思いついた最高の詳細です。

NSArray *array1 = [NSArray array];
NSArray *sortedArray = [NSArray array];
NSMutableArray *tmpArray = [NSMutableArray array];

for (id object in sortedArray)
{
    if ([array1 containsObject:object])
        [tmpArray addObject:object];
}

このコードループは、並べ替えられた配列をスローし、並べ替えられていない配列に同じオブジェクトが含まれているかどうかを確認します。含まれている場合は、tmpArrayに配置します。終了すると、含まれているアイテムを含むソートされた配列が作成されます。

NSPredicateこれは、より最適化されたソリューションに使用していることがわかったリンクですhttps://stackoverflow.com/a/2873439/507299

于 2012-11-14T20:12:06.720 に答える
0

多分そのようなもの

NSMutableArray *excluded = [NSMutableArray array];
NSArray *sortedNames = @[@"name1", @"name5", @"name3", /*more names*/ @"nameX"];
NSArray *tmp = [inputArray sortedArrayUsingComparator: ^(id p1, id p2) {

    NSUInteger pos1 = [sortedNames indexOfObject:((Person *)p1).name];
    NSUInteger pos2 = [sortedNames indexOfObject:((Person *)p2).name];

    if (pos1 == NSNotFound && ![excluded containsObject:p1]) {
        [excluded addObject:p1];
    }
    if (pos2 == NSNotFound && ![excluded containsObject:p2]) {
        [excluded addObject:p2];
    }

    if (pos1 == pos2) return NSOrderedSame;
    if (pos1 > pos2) return NSOrderedDescending;
    return NSOrderedAscending;
}];
NSArray *sortedArray = [tmp subarrayWithRange:NSMakeRange(0, [tmp count] - [excluded count])];
于 2012-11-14T20:35:48.413 に答える