alfreedom
alfreedom

Reputation: 441

sort NSMutableArray created from NSDictionary

i want to sort an NSMutableArray created from a xml parsing with XMLReader

NSURL *url = [NSURL URLWithString:@"http://url.to.xml"];
NSData *urlData = [NSData dataWithContentsOfURL:url];
NSError *error = nil;
NSDictionary *dictPos = [XMLReader dictionaryForXMLData:urlData error:&error];  
NSMutableArray *arrayEquipos = [[dictPos objectForKey:@"posiciones"] objectForKey:@"equipo"];

this is a piece of xml

<posiciones>
<equipo id="5" orden="1" padre="21" key="bocajuniors" nombreCorto="Boca" paisId="1" paisSigla="ARG" nombreasociacion="Boca Jrs.">
    <nombre>Boca Juniors</nombre>
    <prom>1.583</prom>
</equipo>
</posiciones>

what i want to sort is arrayEquipos sorted by tag 'prom' descendent. thanks!

EDIT: in java i do like this:

Collections.sort(arrayEquipos, new MySalaryComp());


class MyEquipoComp implements Comparator<DescensoModel> {

@Override
    public int compare(DescensoModel e1, DescensoModel e2) {
        if((Float.parseFloat(e1.getProm())) < Float.parseFloat(e2.getProm())){
            return 1;
        } else {
            return -1;
        }
    }
}

DescensoModel:

public class DescensoModel  {

private String equipo;
private String prom;

public String getEquipo() {
    return equipo;
}

public void setEquipo(String equipo) {
    this.equipo = equipo;
}

public void setProm(String prom) {
    this.prom = prom;
}
public String getProm() {
    return prom;
}

}

Upvotes: 0

Views: 68

Answers (2)

alfreedom
alfreedom

Reputation: 441

I figured out:

First i created a class called Equipo

@interface Equipo : NSObject

@property NSString *nombre;
@property NSString *prom;

@end

then i created an nsmutable aux array and i filled it

arrayEquiposAux = [[NSMutableArray alloc] initWithCapacity:[arrayEquipos count]];
for(int i=0;i<[arrayEquipos count];i++){
    Equipo *equipo = [[Equipo alloc] init];
    equipo.nombre = [NSString stringWithFormat:@"%@", [[[arrayEquipos objectAtIndex:i] objectForKey:@"nombre"] objectForKey:@"text"]];
    equipo.prom = [NSString stringWithFormat:@"%@", [[[arrayEquipos objectAtIndex:i] objectForKey:@"prom"] objectForKey:@"text"]];
    [arrayEquiposAux addObject: equipo];
}

then, YES! i can sorted that array

NSArray *sortedArray = [arrayEquiposAux sortedArrayUsingComparator:^NSComparisonResult(Equipo *e1, Equipo *e2){
    return [e1.prom compare:e2.prom];
}];

Upvotes: 0

stevesliva
stevesliva

Reputation: 5655

[arrayEquipos sortUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"prom" ascending:YES]]]

Using prom.doubleValue as the key may work as well.

Upvotes: 1

Related Questions