tuplas recorrer funciones diccionarios diccionario arreglos ios objective-c sorting nsarray nsdictionary

ios - recorrer - tuplas swift



Clasificación de NSArray de diccionarios por valor de una clave en los diccionarios (10)

Tengo una matriz poblada por diccionarios, y necesito ordenar la matriz alfabéticamente por los valores de una de las claves de los diccionarios.

Esta es mi matriz:

tu dictus: ( { brand = Ryul; productTitle = Any; quantity = 1; subBrand = "Ryul INJ"; type = Product; }, { brand = Trol; productTitle = Different; quantity = 2; subBrand = ""; type = Brand; }, { brand = Dtor; productTitle = Any; quantity = 1; subBrand = ""; type = Product; }, { brand = Ryul; productTitle = Different; quantity = 2; subBrand = "Ryul CHES"; type = SubBrand; }, { brand = Anan; productTitle = Any; quantity = 1; subBrand = ""; type = Product; } )

Normalmente para ordenar una matriz, usaré

myArray = [uniqueProdsArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

¿Pero cómo se ordena con la clave de brand del diccionario?


Como una adición al código de QED,

NSSortDescriptor * brandDescriptor = [[NSSortDescriptor alloc] initWithKey:@"brand" ascending:YES]; NSArray * sortedArray = [myArray sortedArrayUsingDescriptors:@[brandDescriptor]];

Esto aclara las clases de las variables y optimiza la creación de la matriz con enumeración rápida. Gracias


Creo que esto lo hará:

brandDescriptor = [[NSSortDescriptor alloc] initWithKey:@"brand" ascending:YES]; sortDescriptors = [NSArray arrayWithObject:brandDescriptor]; sortedArray = [myArray sortedArrayUsingDescriptors:sortDescriptors];

Saqué el código de los temas de programación de Sort Descriptor . Además, la codificación de clave-valor entra en juego, en sortedArrayUsingDescriptors: enviará un valueForKey: a cada elemento en myArray , y luego usará comparadores estándar para ordenar los valores devueltos.


En switf:

var descriptor: NSSortDescriptor = NSSortDescriptor(key: "brand", ascending: true) var sortedResults: NSArray = results.sortedArrayUsingDescriptors([descriptor])


Mi código se NSSortDescriptor al usar NSSortDescriptor así que terminé usando un bloque que funciona muy bien en mi caso de uso, donde estoy esperando que el "rango" sea un NSNumber. Si el objeto no se puede convertir a un número entero, no se ordenará, pero tampoco causará un bloqueo.

NSArray *sortedArray = [data sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { long data1 = [[obj1 valueForKey:@"rank"] integerValue]; long data2 = [[obj2 valueForKey:@"rank"] integerValue]; if (data1 > data2) { return (NSComparisonResult)NSOrderedDescending; } if (data1 < data2) { return (NSComparisonResult)NSOrderedAscending; } return (NSComparisonResult)NSOrderedSame; }];


Puedes hacerlo .

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"d LLLL yyyy"]; NSComparator compareDates = ^(id string1, id string2) { NSDate *date1 = [formatter dateFromString:string1]; NSDate *date2 = [formatter dateFromString:string2]; return [date1 compare:date2]; }; NSSortDescriptor * sortDesc1 = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO comparator:compareDates]; [array sortUsingDescriptors:[NSArray arrayWithObjects:sortDesc1, nil]];


Solo pruébalo de la manera más fácil ...

myArray = [[NSMutableArray alloc] init]; NSMutableArray *tempArray = [[NSMutableArray alloc] init]; [tempArray removeAllObjects]; [tempArray addObjectsFromArray: myArray]; NSString *key = @"brand"; NSSortDescriptor *brandDescriptor = [[NSSortDescriptor alloc] initWithKey:key ascending:YES]; NSArray *sortDescriptors = [NSArray arrayWithObjects:brandDescriptor,nil]; NSArray *sortedArray = [tempArray sortedArrayUsingDescriptors:sortDescriptors]; [brandDescriptor release]; [tempArray removeAllObjects]; tempArray = (NSMutableArray*)sortedArray; [myArray removeAllObjects]; [myArray addObjectsFromArray:tempArray];


Tenemos la solución mediante el uso del método sigue

[self.jsonData sortUsingDescriptors: [NSArray arrayWithObjects: [NSSortDescriptor sortDescriptorWithKey:"fullname" ascending:YES], [NSSortDescriptor sortDescriptorWithKey:"id" ascending:NO], nil]];

Dónde:-

jsonData - MutableArray que contiene los datos JSON Parsed.

fullname : los datos que queremos ordenar.

id : datos únicos que vienen con el diccionario interno.


Use el siguiente código para ordenar usando la clave "marca" del diccionario.

NSSortDescriptor * brandDescriptor = [[NSSortDescriptor alloc] initWithKey:@"brand" ascending:YES]; NSArray * sortDescriptors = [NSArray arrayWithObject:brandDescriptor]; NSArray * sortedArray = [myArray sortedArrayUsingDescriptors:sortDescriptors]; NSLog(@"sortedArray %@",sortedArray);

Use el siguiente código, si desea clasificar de acuerdo con dos claves del diccionario; Como, tecla "marca" y clave del título del producto del diccionario: -

NSSortDescriptor * brandDescriptor = [[NSSortDescriptor alloc] initWithKey:@"brand" ascending:YES]; NSSortDescriptor * productTitleDescriptor = [[NSSortDescriptor alloc] initWithKey:@"productTitle" ascending:YES]; NSArray * sortDescriptors = [NSArray arrayWithObjects:brandDescriptor, productTitleDescriptor, nil]; NSArray * sortedArray = [feedData sortedArrayUsingDescriptors:sortDescriptors]; NSLog(@"sortedArray %@",sortedArray);


arrSorted = [arrBrand sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { if ([[obj1 valueForKey:@"iUserId"] integerValue] > [[obj2 valueForKey:@"iUserId"] integerValue]) { return (NSComparisonResult)NSOrderedDescending; } if ([[obj1 valueForKey:@"iUserId"] integerValue] < [[obj2 valueForKey:@"iUserId"] integerValue]) { return (NSComparisonResult)NSOrderedAscending; } return (NSComparisonResult)NSOrderedSame; }];


NSSortDescriptor *brandDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"Position" ascending:YES selector:@selector(localizedStandardCompare:)] autorelease]; NSArray *sortDescriptors = [NSArray arrayWithObject:brandDescriptor]; NSArray *sortedArray = [arrTemp sortedArrayUsingDescriptors:sortDescriptors]; array_PreLagData=(NSMutableArray*)sortedArray; unsorted array Printing description of arrTemp: <__NSArrayM 0x10282100>( { Milker2 = "11:03:17 AM"; Position = 2; }, { Milker1 = "11:03:28 AM"; Position = 25; }, { Milker3 = "11:03:18 AM"; Position = 3; }, { Milker1 = "11:03:16 AM"; Position = 1; Strip = "11:32:32 AM"; }, { Milker1 = "11:03:21 AM"; Position = 10; } ) Sorted array <__NSArrayI 0x101363c0>( { Milker1 = "11:03:16 AM"; Position = 1; Strip = "11:32:32 AM"; }, { Milker2 = "11:03:17 AM"; Position = 2; }, { Milker3 = "11:03:18 AM"; Position = 3; }, { Milker1 = "11:03:21 AM"; Position = 10; }, { Milker1 = "11:03:28 AM"; Position = 25; } ) [enter link description here][1] [1]: https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/SortDescriptors/Articles/Creating.html#//apple_ref/doc/uid/20001845-BAJEAIEE