Objective c 是否在不使用任何键的情况下使用NSSortDescriptor对数组进行排序?
我有一个数组appd.arrOfDictAppProd,其中有一个键Price,它是一个字符串值。但我想按价格值对这个数组进行排序。因此,我从appd.arrOfDictAppProd数组中获取Price键,并将Price转换为String,再生成一个不带任何键的NSMutableArraynewarray。我想使用NSSortDescriptor对其进行排序,而不使用任何键,因为在我的新数组中没有键。我的代码在这里:Objective c 是否在不使用任何键的情况下使用NSSortDescriptor对数组进行排序?,objective-c,nsmutablearray,nssortdescriptor,Objective C,Nsmutablearray,Nssortdescriptor,我有一个数组appd.arrOfDictAppProd,其中有一个键Price,它是一个字符串值。但我想按价格值对这个数组进行排序。因此,我从appd.arrOfDictAppProd数组中获取Price键,并将Price转换为String,再生成一个不带任何键的NSMutableArraynewarray。我想使用NSSortDescriptor对其进行排序,而不使用任何键,因为在我的新数组中没有键。我的代码在这里: for (int i = 0; i<appd.arrOfDictApp
for (int i = 0; i<appd.arrOfDictAppProd.count; i++) {
NSString *price_Value = [[appd.arrOfDictAppProd objectAtIndex:indexPath.row] objectForKey:@"price"];
int price_IntValue = [price_Value intValue];
NSLog(@"int value of prices:%d",price_IntValue);
NSNumber *num = [NSNumber numberWithInteger:price_IntValue];
NSLog(@"number-%@",num);
[newarray addObject:num];
}
NSLog(@"price array:%@",newarray);
NSSortDescriptor *sortDescriptor;
sortDescriptor =[[NSSortDescriptor alloc] initWithKey:@"num"
ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray1;
sortedArray1 = [newarray sortedArrayUsingDescriptors:sortDescriptors];
for(int i=0;i因为newarray
只是NSNumber
s的(可变)数组,而NSNumber
实现了compare:
方法,您可以调用
[newarray sortArrayUsingComparator:@selector(compare:)];
在for循环之后。您不需要排序描述符。因为newarray
只是一个NSNumber
s的(可变)数组,而NSNumber
实现了比较:
方法,您可以调用
[newarray sortArrayUsingComparator:@selector(compare:)];
在for循环之后。您不需要排序描述符。可能我没有抓住要点,但听起来好像您将事情复杂化了很多
NSArray *sortedArray = [appd.arrOfDictAppProd sortedArrayUsingDescriptors:
@[
[NSSortDescritptor sortDescriptorWithKey:@"price.intValue" ascending:YES]
]];
如果您想创建newarray
而不考虑-或只是不使用手动循环-则使用:
NSArray *newarray = [appd.arrOfDictAppProd valueForKeyPath:@"price.intValue"];
这里所依赖的机制是键值编码。我还构建了NSDictionary
和NSArray
实现键值编码的具体方式
-valueForKey:
和-valueForKeyPath:
由NSObject
提供。忽略特殊情况和回退,对象将通过将该属性的值作为对象返回来响应前者-除其他外,它将自动将内置数字类型转换为NSNumber
s。后者将l遍历对象层次结构,例如对象。property1.property2
将请求对象
,然后从对象
请求属性
,然后从属性
请求属性
因此,您可以使用[stringObject valueForKey:@“intValue”]
访问stringObject
上的intValue
属性,然后让NSObject
将其打包成一个NSNumber
NSDictionary
有一个键值编码的实现,它将在字典中查找适当的值,除非它的前缀是@
,这意味着您需要有关字典的信息,而不是来自字典。因为您的键名是一个字符串,它不是以@
开头,valueForKe>因此,y:
最终会调用objectForKey:
因此,在一组字典上带有keyprice.intValue
的排序描述符将向每个字典询问keyprice
的值。字典将决定调用objectForKey:
。它将返回一个字符串。它将对该字符串调用intValue
,并返回一个int
。然后它将将其放入一个NSNumber
中,比较所有字典的数字以确定顺序
NSArray
实现valueForKey:
和valueForKeyPath:
,方法是依次调用数组中每个项上的相应方法,然后返回包含所有这些结果的数组。因此,您可以使用键值编码作为一种在一定程度上映射结果的方法。可能我没有抓住要点,但它没有好像你把事情复杂化了
NSArray *sortedArray = [appd.arrOfDictAppProd sortedArrayUsingDescriptors:
@[
[NSSortDescritptor sortDescriptorWithKey:@"price.intValue" ascending:YES]
]];
如果您想创建newarray
而不考虑-或只是不使用手动循环-则使用:
NSArray *newarray = [appd.arrOfDictAppProd valueForKeyPath:@"price.intValue"];
这里所依赖的机制是键值编码。我还构建了NSDictionary
和NSArray
实现键值编码的具体方式
-valueForKey:
和-valueForKeyPath:
由NSObject
提供。忽略特殊情况和回退,对象将通过将该属性的值作为对象返回来响应前者-除其他外,它将自动将内置数字类型转换为NSNumber
s。后者将l遍历对象层次结构,例如对象。property1.property2
将请求对象
,然后从对象
请求属性
,然后从属性
请求属性
因此,您可以使用[stringObject valueForKey:@“intValue”]
访问stringObject
上的intValue
属性,然后让NSObject
将其打包成一个NSNumber
NSDictionary
有一个键值编码的实现,它将在字典中查找适当的值,除非它的前缀是@
,这意味着您需要有关字典的信息,而不是来自字典。因为您的键名是一个字符串,它不是以@
开头,valueForKe>因此,y:
最终会调用objectForKey:
因此,在一组字典上带有keyprice.intValue
的排序描述符将向每个字典询问keyprice
的值。字典将决定调用objectForKey:
。它将返回一个字符串。它将对该字符串调用intValue
,并返回一个int
。然后它将将其放入一个NSNumber
中,比较所有字典的数字以确定顺序
NSArray
实现valueForKey:
和valueForKeyPath:
,方法是依次调用数组中每个项上的相应方法,然后返回包含所有这些结果的数组。因此,您可以使用键值编码作为在一定程度上映射结果的方法。为什么要对此进行升级表决?这不会有帮助OP声明newArray
cont