打印时为什么没有订购流氓的元素?

时间:2013-11-11 13:26:52

标签: set rascal

为了便于使用,当我编写以下代码时

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

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

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

这个例子当然过于简单,为此,排序并没有真正受到伤害。但是,在更复杂的示例中,我希望对输出进行排序,以便我可以更轻松地验证集合中是否包含某个元素。

印刷套装的当前排序是否有意义?

2 个答案:

答案 0 :(得分:3)

来自Rascal Tutor

  

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

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

wikipedia page on Sets

  

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

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

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

答案 1 :(得分:2)

当然,你总能做到:

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

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