Ios 什么';在一个比较区的幕后发生了什么?

Ios 什么';在一个比较区的幕后发生了什么?,ios,objective-c,Ios,Objective C,我已经研究了一些问题,比如解释如何对一系列字典进行排序的问题。但我还没有找到解释NSComparator块实际上是如何工作的,我真的很好奇 示例代码(来自上面链接的Q): 块的两个输入来自哪里?排序集合所需的迭代是如何发挥作用的?等等,谢谢 数组排序方法的实现可能使用二进制排序或其他需要重复比较数组中两个对象的高效排序算法。每次需要进行比较时,它都会调用块,传入它需要计算的两个对象。块的结果告诉算法两个对象如何相互比较。数组排序方法的实现可能使用二进制排序或其他需要重复比较数组中两个对象的高效排

我已经研究了一些问题,比如解释如何对一系列字典进行排序的问题。但我还没有找到解释NSComparator块实际上是如何工作的,我真的很好奇

示例代码(来自上面链接的Q):


块的两个输入来自哪里?排序集合所需的迭代是如何发挥作用的?等等,谢谢

数组排序方法的实现可能使用二进制排序或其他需要重复比较数组中两个对象的高效排序算法。每次需要进行比较时,它都会调用块,传入它需要计算的两个对象。块的结果告诉算法两个对象如何相互比较。

数组排序方法的实现可能使用二进制排序或其他需要重复比较数组中两个对象的高效排序算法。每次需要进行比较时,它都会调用块,传入它需要计算的两个对象。块的结果告诉算法这两个对象如何相互比较。

想象一下,您正在编写方法来实现这一点。您可以使用任何一种有效的排序算法对数组进行排序(哪一种算法无关紧要,这是计算机科学中研究得很好的问题)

在这种排序方法的核心,您将比较两个项目,以确定哪一个项目的顺序应高于另一个项目。但在编写通用排序方法时,您不知道实际对象将如何排序。因此,您将把实际的比较方法留给真正想要使用您的方法的人,他们将在一个块中提供该方法。所以,你可以这样写你的方法

- (NSArray *)mySortMethodUsingBlock:(NSComparator(^)(id obj1, id obj2))comparator {
    // Keep repeating these steps til the array is sorted:
    // Some methods to walk the array get two elements to examine
    // Pass these two objects to the block that the user has provided and get their order
    NSComparator result = comparator (anObj, anotherObj);
    // Use the result to determine how the objects are positioned

    // Return the sorted array.
}

所以。当您创建比较器块时,您只是告诉该方法如何比较两个对象。然后,该方法可以使用这些信息以有效的方式对数组进行排序。

想象您编写该方法就是为了这样做。您可以使用任何一种有效的排序算法对数组进行排序(哪一种算法无关紧要,这是计算机科学中研究得很好的问题)

在这种排序方法的核心,您将比较两个项目,以确定哪一个项目的顺序应高于另一个项目。但在编写通用排序方法时,您不知道实际对象将如何排序。因此,您将把实际的比较方法留给真正想要使用您的方法的人,他们将在一个块中提供该方法。所以,你可以这样写你的方法

- (NSArray *)mySortMethodUsingBlock:(NSComparator(^)(id obj1, id obj2))comparator {
    // Keep repeating these steps til the array is sorted:
    // Some methods to walk the array get two elements to examine
    // Pass these two objects to the block that the user has provided and get their order
    NSComparator result = comparator (anObj, anotherObj);
    // Use the result to determine how the objects are positioned

    // Return the sorted array.
}

所以。当您创建比较器块时,您只是告诉该方法如何比较两个对象。然后,该方法可以使用这些信息高效地对数组进行排序。

啊,我明白了,sortUsingComparator方法完成了所有“幕后”工作,而comparator只提供了其名称所暗示的内容。有道理。thanksAh,我明白了,sortUsingComparator方法完成了所有“幕后”工作,而comparator正好提供了它的名称所暗示的内容。有道理。谢谢