Uml 通过OCL反转Eclipse建模框架模型中的OrderedSet

Uml 通过OCL反转Eclipse建模框架模型中的OrderedSet,uml,eclipse-emf,modeling,ocl,Uml,Eclipse Emf,Modeling,Ocl,我有一个UML模型(它实际上是无关的,因为它可能是任何MOF模型),有一个有序的集合,我需要从最后一个元素访问到第一个元素。因此,我需要通过OCL将其反转。我见过sortedBy方法,它需要一个OCLExpression作为排序标准,但我不知道如何使用它 有什么想法吗?如果您正在使用Acceleo(您的评论表明您正在使用),您有两个选择: 使用由提供的“myOrderedSet->reverse()”(这不是100%纯OCL) 使用类似“myOrderedSet->iterate(elem:M

我有一个UML模型(它实际上是无关的,因为它可能是任何MOF模型),有一个有序的集合,我需要从最后一个元素访问到第一个元素。因此,我需要通过OCL将其反转。我见过sortedBy方法,它需要一个OCLExpression作为排序标准,但我不知道如何使用它

有什么想法吗?

如果您正在使用Acceleo(您的评论表明您正在使用),您有两个选择:

  • 使用由提供的“myOrderedSet->reverse()”(这不是100%纯OCL)
  • 使用类似“myOrderedSet->iterate(elem:MyType | myrderedset.insertAt(0,elem))”的内容
编辑:我已经很久没有使用iterate了,因为我一直在使用reverse,iterate的正确用法是:。如果有人有疑问,下面是相反的答案:

问候,


Stephane Begaudeau

iterate似乎不是OrderedSet的OCL有效方法。因为您似乎真的在使用Acceleo,所以“->reverse()”是最简单的方法,正如我指向Acceleo文档的链接所示,它是在OrderedSet和Sequence:上实现的。只需确保您拥有OrderedSet,而不是没有反向操作的集合。我已编辑了我的答案,并更正了iterate声明和在Acceleo中测试的两种解决方案的屏幕截图。非常感谢Stephane。事实上,我试图按照模型中包含的片段的确切顺序来获取包含在交互中的片段,但顺序相反。为此,我正在做interaction.fragment->asOrderedSet(),它实际上返回有序的片段集。但是,interaction.fragment->asOrderedSet()->reverse()和iterate都标记为错误,但当我到达办公室时,我将检查已安装的ACCELEO版本。再次感谢你的帮助