gpt4 book ai didi

objective-c - block 比较器如何在 Obj C 中工作?

转载 作者:行者123 更新时间:2023-12-04 05:01:04 26 4
gpt4 key购买 nike

这不是我该怎么做这篇文章。相反,我想了解它是如何工作的,希望其他人也能学习。

在这个例子中,假设我有一个 NSMutableArray,其中包含 NSDecimalNumber 对象。假设里面的对象,没有特定的顺序,是 [-464.50, +457.20, 0, -1000] .在比较它们之前,我将绝对值应用于它们。

在我的代码中,我使用 sortUsingComparator方法并给它一个块。我开始测试不同的条件,这是在 UITableView 中显示的结果:

return [person1Amount compare:person2Amount];
==> 0, 457.20, -464.50, -1000

如果,
return [person2Amount compare:person1Amount];
==> -1000, -464.50, +457.42, 0
compare:怎么办方法确实有效。 NSDecimalNumber文档 here并没有真正向我解释。这部分特别让我困惑:

Return Value NSOrderedAscending if the value of decimalNumber is greater than the receiver; NSOrderedSame if they’re equal; and NSOrderedDescending if the value of decimalNumber is less than the receiver.



这是否意味着数组内对象的顺序决定了它的排序方式?例如,如果 person1.number < person2.number ,它会按升序对数组进行排序吗?为什么我的代码 [person2Amount compare:person1Amount]产生正确的结果?

它看起来像 person2Amount is < person1Amount所以它降序排序,但如果 person2Amount is > person1Amount ,那么它会按升序排序吗?

我的理解似乎不对。

谢谢!

最佳答案

由于您正在比较绝对值,因此让我们忽略符号。你的数字是 464.50、457.20、0 和 1000。升序意味着数字变大,所以顺序是 0、457.20、464.50、1000。降序意味着它们变小,所以顺序是 1000、465.7.50、4000 0.

使用比较器时,数组会根据比较器按升序排序。它向比较器发送成对的值。如果比较器返回它们按升序排列,则将第一个放在最前面。如果它返回它们按降序排列,则将第二个放在最前面。

NSNumber compare:方法基本上是这样工作的(当然你不能在 NSNumbers 上使用 ><,但它的想法是):

- (NSComparisonResult)compare:(NSNumber *)number2 {
if(self < number2) return NSOrderedAscending;
if(self > number2) return NSOrderedDescending;
return NSOrderedSame;
}

因此,如果您的比较器调用 [number1 compare:number2] ,如果数字是升序的(数字 1 较小),则结果将是升序的,这意味着它们将保持该顺序并在数组中升序。如果比较器切换它们, [number2 compare:number1] ,如果数字是降序的(数字 2 较小),结果将是升序的,因此它们将被切换并在数组中降序。

关于objective-c - block 比较器如何在 Obj C 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16136899/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com