为了可用性,当我写下面的代码
{1,2,3,4,5,6,7,8,9,10}
我希望 Rascal 控制台打印相同的内容,但在输出窗口中我看到:
{10,9,8,7,6,5,4,3,2,1}
这个例子当然过于简单了,因此排序并没有什么坏处。但是,在更复杂的示例中,我希望对输出进行排序,以便我可以更轻松地验证某个元素是否包含在集合中。
打印集的当前排序是否有意义?
来自流氓导师:
集合是无序的值序列,具有以下属性:
- 所有元素都具有相同的静态类型。
- 元素的顺序无关紧要。
- 一个集合只包含一个元素一次。换句话说,重复元素被消除了,无论一个元素被添加到一个集合中多少次,它只会在其中出现一次。
在计算机科学中,集合是一种抽象的数据结构,可以存储某些值,没有任何特定的顺序,也没有重复的值。
所以您观察到的行为与预期的一样,集合内没有顺序,显示的顺序是由于实现(java HashSet)。在打印之前或在构建过程中进行排序会产生负面的性能开销,并且可能会给用户带来有订单的错误印象。
关于第一个建议,使用与提供的相同序列,这将需要一个效率较低的数据结构,并且会再次损害我们必须打印一组的off-change的性能。
当然,你总是可以这样做:
import List;
import Set;
sort(toList({4,2,1,3}))
如果你真的想要输出排序。