Objective c 是否在不使用任何键的情况下使用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

我有一个数组appd.arrOfDictAppProd,其中有一个键Price,它是一个字符串值。但我想按价格值对这个数组进行排序。因此,我从appd.arrOfDictAppProd数组中获取Price键,并将Price转换为String,再生成一个不带任何键的NSMutableArraynewarray。我想使用NSSortDescriptor对其进行排序,而不使用任何键,因为在我的新数组中没有键。我的代码在这里:

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:

因此,在一组字典上带有key
price.intValue
的排序描述符将向每个字典询问key
price
的值。字典将决定调用
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:

因此,在一组字典上带有key
price.intValue
的排序描述符将向每个字典询问key
price
的值。字典将决定调用
objectForKey:
。它将返回一个字符串。它将对该字符串调用
intValue
,并返回一个
int
。然后它将将其放入一个
NSNumber
中,比较所有字典的数字以确定顺序


NSArray
实现
valueForKey:
valueForKeyPath:
,方法是依次调用数组中每个项上的相应方法,然后返回包含所有这些结果的数组。因此,您可以使用键值编码作为在一定程度上映射结果的方法。

为什么要对此进行升级表决?这不会有帮助OP声明
newArray
cont