1

为了可用性,当我写下面的代码

{1,2,3,4,5,6,7,8,9,10}

我希望 Rascal 控制台打印相同的内容,但在输出窗口中我看到:

{10,9,8,7,6,5,4,3,2,1}

这个例子当然过于简单了,因此排序并没有什么坏处。但是,在更复杂的示例中,我希望对输出进行排序,以便我可以更轻松地验证某个元素是否包含在集合中。

打印集的当前排序是否有意义?

4

2 回答 2

3

来自流氓导师

集合是无序的值序列,具有以下属性:

  • 所有元素都具有相同的静态类型。
  • 元素的顺序无关紧要。
  • 一个集合只包含一个元素一次。换句话说,重复元素被消除了,无论一个元素被添加到一个集合中多少次,它只会在其中出现一次。

以及Sets 上的维基百科页面

在计算机科学中,集合是一种抽象的数据结构,可以存储某些值,没有任何特定的顺序,也没有重复的值。

所以您观察到的行为与预期的一样,集合内没有顺序,显示的顺序是由于实现(java HashSet)。在打印之前或在构建过程中进行排序会产生负面的性能开销,并且可能会给用户带来有订单的错误印象。

关于第一个建议,使用与提供的相同序列,这将需要一个效率较低的数据结构,并且会再次损害我们必须打印一组的off-change的性能。

于 2013-11-11T14:22:39.177 回答
2

当然,你总是可以这样做:

import List;
import Set;
sort(toList({4,2,1,3}))

如果你真的想要输出排序。

于 2013-11-11T18:48:48.030 回答