
快速排序插件
为自定义排序用例提供接口
查看大图该插件将为模组脚本提供使用当前最高效(在速度和内存占用方面)的排序算法的能力。
它不会修改游戏中的任何参数或内容。此模组仅面向开发者使用。
[u]以下说明面向计划使用此模组的模组开发者:[/u]
模组开发者可通过调用 quicksort 脚本使用该排序器。它将升序排列输入的 [i]objects[/i] 列表(依据给定的 [i]values[/i])。
[u]使用示例:[/u]
<run_script name="'quicksort'">
<param name="objects" value="$UnsortedObjects"/>
<param name="values" value="$UnsortedValues"/>
<save_retval name="sortedobject" variable="$SortedObjects" />
<save_retval name="sortedvalue" variable="$SortedValues" />
</run_script>
其中 $UnsortedObjects 包含未排序的对象,$UnsortedValues 包含用于排序的参照值。
- $UnsortedObjects 可包含任意类型的任意值。
- $UnsortedValues 必须包含浮点数或整数类型的值。
- $UnsortedObjects 与 $UnsortedValues 必须具有相同的条目数量。
- $SortedObjects 与 $SortedValues 在脚本执行完毕后将分别包含输入数据的排序结果。
[u]工作原理:[/u]
再举一个例子:
假设 $UnsortedObjects 包含以下数据:[wareY, wareZ, wareX]
而 $UnsortedValues 包含以下数据:[2, 3, 1]
两个列表中相同索引位置的元素相互对应(即排序算法将认为 $UnsortedObjects 的第一个元素 wareY 对应 $UnsortedValues 的第一个值 2,以此类推)。
这对于理解“所有元素将依据其对应值升序排列”这一规则至关重要。
[u]运行排序脚本后的结果:[/u]
$SortedObjects: [wareX, wareY, wareZ]
$SortedValues: [1, 2, 3]
元素现在已排序,$SortedValues 按升序排列,其对应的对象在配对列表中同步调整了顺序。
此方法适用于任意大小的列表。
[u]使用场景示例:[/u]
你想按货物容量(举例)对一组空间站进行排序。
操作步骤如下:
首先遍历你的空间站列表,构建用于排序的值列表:
<create_list name="$UnsortedStationValues" />
<do_all exact="$UnsortedStations.count" counter="$b">
<append_to_list name="$UnsortedStationValues" exact="$UnsortedStations.{$b}.cargo.capacity.all"/>
</do_all>
现在,我们已将所有值按与 $UnsortedStations 相同的顺序([b]重要[/b])存储在另一个列表中。
$UnsortedStations 的第一个元素对应 $UnsortedStationValues 的第一个元素,第二个元素对应第二个元素,以此类推。
接着运行排序脚本:
<run_script name="'quicksort'">
<param name="objects" value="$UnsortedStations"/>
<param name="values" value="$UnsortedStationValues"/>
<save_retval name="sortedobject" variable="$SortedStations" />
<save_retval name="sortedvalue" variable="$SortedStationValues" />
</run_script>
之后,$SortedStationValues 将包含升序排列的值,$SortedStations 的元素也相应调整了顺序。
如果再次遍历结果列表并输出空间站对象的 cargo.capacity 属性,你会发现它们已按升序排列。
还没有人评论,去客户端里说两句吧。
评论在新手盒子客户端中发表,这里同步展示。