Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使用比较器的分拣机无法准确工作_Objective C_Sorting_Nsarray_Nsnumber - Fatal编程技术网

Objective c 使用比较器的分拣机无法准确工作

Objective c 使用比较器的分拣机无法准确工作,objective-c,sorting,nsarray,nsnumber,Objective C,Sorting,Nsarray,Nsnumber,我正在尝试对数组进行排序,但它似乎无法可靠地工作 这是用于排序的代码。基本上,请求优先级ID的值为1-5 例如: 有时它的排序正确1-5,但有时它排序1 2 4 5 3 然后,当我去查看NSLog时,它会吐出非常大的值,而它们应该是1-5 下面是示例输出 值B 168492640 值A:168492640 值B 168492640 价值A:174580912 值B 168492640 价值A:174580912 值B 168492640 价值A:174580912 值B 168492640

我正在尝试对数组进行排序,但它似乎无法可靠地工作

这是用于排序的代码。基本上,请求优先级ID的值为1-5 例如:

有时它的排序正确1-5,但有时它排序1 2 4 5 3

然后,当我去查看NSLog时,它会吐出非常大的值,而它们应该是1-5

下面是示例输出

值B 168492640
值A:168492640
值B 168492640
价值A:174580912
值B 168492640
价值A:174580912
值B 168492640
价值A:174580912
值B 168492640
价值A:174580912
值B 168492640
值A:174580912


发生了什么事?谢谢大家!

在调试器显示中,
[(请求*)优先级ID]
似乎是一个
NSNumber
,但是 您将其视为整数(因此您实际上是在比较对象的地址)

以下各项应能发挥作用:

sortedArray = [self.selectedReqArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
            NSNumber *first = [(Request*)a priorityID];
            NSNumber *second = [(Request*)b priorityID];
            return [first compare:second];
        }];
写这篇文章的一种可能稍微优雅一点的方式是

sortedArray = [self.selectedReqArray sortedArrayUsingComparator:^NSComparisonResult(Request* a, Request* b) {
            NSNumber *first = [a priorityID];
            NSNumber *second = [b priorityID];
            return [first compare:second];
        }];
如果
请求
类与密钥
优先级ID
的键值编码兼容,则 以下方面也应发挥作用:

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"priorityID" ascending:YES];
sortedArray = [self.selectedReqArray sortedArrayUsingDescriptors:@[sort]];

从调试器显示中,
[(请求*)优先级ID]
似乎是一个
NSNumber
,但是 您将其视为整数(因此您实际上是在比较对象的地址)

以下各项应能发挥作用:

sortedArray = [self.selectedReqArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
            NSNumber *first = [(Request*)a priorityID];
            NSNumber *second = [(Request*)b priorityID];
            return [first compare:second];
        }];
写这篇文章的一种可能稍微优雅一点的方式是

sortedArray = [self.selectedReqArray sortedArrayUsingComparator:^NSComparisonResult(Request* a, Request* b) {
            NSNumber *first = [a priorityID];
            NSNumber *second = [b priorityID];
            return [first compare:second];
        }];
如果
请求
类与密钥
优先级ID
的键值编码兼容,则 以下方面也应发挥作用:

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"priorityID" ascending:YES];
sortedArray = [self.selectedReqArray sortedArrayUsingDescriptors:@[sort]];

你就是炸弹!是的,这解决了问题,我把它改成了优雅的版本。谢谢!你就是炸弹!是的,这解决了问题,我把它改成了优雅的版本。谢谢!