在埃菲尔铁塔中对可比对象集合进行排序的一些方法
Some ways to sort a collection of comparables in eiffel
我应该使用哪个内核库来对 eiffel 中的集合进行排序?
在哪里可以找到排序的例子?典型的冒泡排序等可用吗?
任何带有代理的分类器也将非常有用,以避免必须使用未实现的可比对象来进行分类,例如使用 PATH class
库 base_extension
提供延迟 class SORTER
with effective implementations 冒泡、快速和 shell 排序算法。
它使用比较器对象对任意类型的元素进行比较,不一定是 COMPARABLE
类型。比较器接口的实现之一是 AGENT_EQUALITY_TESTER
,您向其传递代理以确定一个对象是否小于另一个对象。
这是一个示例,说明如何使用冒泡排序按路径的规范名称对路径进行排序:
sort_paths (a_paths: INDEXABLE [PATH, INTEGER])
local
l_sorter: SORTER [PATH]
do
create {BUBBLE_SORTER [PATH]} l_sorter.make
(create {AGENT_EQUALITY_TESTER [PATH]}.make (
agent (a_p1, a_p2: PATH): BOOLEAN
do
Result := a_p1.canonical_path < a_p2.canonical_path
end))
l_sorter.sort (a_paths)
end
现在,如果有 ARRAYED_LIST [PATH]
类型的路径列表 paths
,可以通过调用 sort_paths (paths)
.
对其进行排序
我应该使用哪个内核库来对 eiffel 中的集合进行排序?
在哪里可以找到排序的例子?典型的冒泡排序等可用吗?
任何带有代理的分类器也将非常有用,以避免必须使用未实现的可比对象来进行分类,例如使用 PATH class
库 base_extension
提供延迟 class SORTER
with effective implementations 冒泡、快速和 shell 排序算法。
它使用比较器对象对任意类型的元素进行比较,不一定是 COMPARABLE
类型。比较器接口的实现之一是 AGENT_EQUALITY_TESTER
,您向其传递代理以确定一个对象是否小于另一个对象。
这是一个示例,说明如何使用冒泡排序按路径的规范名称对路径进行排序:
sort_paths (a_paths: INDEXABLE [PATH, INTEGER])
local
l_sorter: SORTER [PATH]
do
create {BUBBLE_SORTER [PATH]} l_sorter.make
(create {AGENT_EQUALITY_TESTER [PATH]}.make (
agent (a_p1, a_p2: PATH): BOOLEAN
do
Result := a_p1.canonical_path < a_p2.canonical_path
end))
l_sorter.sort (a_paths)
end
现在,如果有 ARRAYED_LIST [PATH]
类型的路径列表 paths
,可以通过调用 sort_paths (paths)
.