1

NSArrayがあり、配列内の各アイテムには「venue」という内部配列があり、その中に「location」という別の配列があります。各「location」配列内の「distance」値で配列を並べ替えたいと思います。

誰かが私を正しい方向に向けることができますか、これは配列です。

{
    venue =         {
        beenHere =             {
            count = 0;
            marked = 0;
        };
        location =             {
            address = "845 Market St.";
            city = "San Francisco";
            country = "United States";
            crossStreet = "Westfield Food Emporium";
            distance = 137;
            lat = "37.78459765160777";
            lng = "-122.40650538423186";
            postalCode = 94103;
            state = CA;
        };
    };
},{
    venue =         {
        beenHere =             {
            count = 0;
            marked = 0;
        };
        location =             {
            address = "845 Market St.";
            city = "San Francisco";
            country = "United States";
            crossStreet = "Westfield Food Emporium";
            distance = 137;
            lat = "37.78459765160777";
            lng = "-122.40650538423186";
            postalCode = 94103;
            state = CA;
        };
    };
},

現時点では以下を使用していますが、効果がないようです。

NSSortDescriptor* sortOrder = [NSSortDescriptor sortDescriptorWithKey:@"distance" ascending: YES];

                self.venueObject = [venueObject sortedArrayUsingDescriptors: [NSArray arrayWithObject: sortOrder]];

ありがとう

オリバー

4

1 に答える 1

4

私があなたの質問を正しく理解しているなら、あなたは辞書の配列を持っていて、それらの辞書のサブキー内でいくつかの値を並べ替えたいと思っています。

sortedArrayUsingComparator:メソッドを使用する必要があります。

このようなものがあなたのために働くはずです:

NSArray * sortedVenues = [venues sortedArrayUsingComparator:^NSComparisonResult(NSDictionary * venue1, NSDictionary * venue2) {
    float distance1 = [[venue1 valueForKeyPath: @"location.distance"] floatValue];
    float distance2 = [[venue2 valueForKeyPath: @"location.distance"] floatValue];

    if (distance1 > distance2) {
        return NSOrderedDescending;
    } else if (distance1 < distance2) {
        return NSOrderedAscending;
    } else {
        return NSOrderedSame;
    }
}];
于 2012-04-19T11:14:54.613 に答える