11.9.5 OrderedSet
source类型是OrderedSet(T)的标准迭代器表达式是:
select(expression: OclExpression): OrderedSet(T)
body为真的source序列的有序集合。
source->select(iterator | body) =
source->iterate(iterator; result : OrderedSet(T) = OrderedSet{} |
if body then result->including(iterator)
else result
endif)
select最多只有一个迭代器变量。
reject
source有序集合中body计算为假的元素组成的有序集合。
source->reject(iterator | body) = source->select(iterator | not body)
reject最多只能有一个迭代器变量。
collectNested
对source有序集合中的每个成员应用body所产生的结果元素的序列。
source->collectNested(iterator | body) =
source->iterate(iterator; result : Sequence(body.type) = Sequence{} | result->append(body ) )
collectNested最多只能有一个迭代器变量。
sortedBy(expression: OclExpression): OrderedSet(T)
产生一个包含source集合所有元素的有序集合。元素中对于body计算结果最小的排在第一位,依此类推。body表达式的类型必须定义了 < 操作。< 操作必须返回一个布尔且必须是可传递的(即,如果 a < b 且 b < c,那么有 a < c)。
source->sortedBy(iterator | body) = iterate( iterator ; result : OrderedSet(T) : OrderedSet {} |
if result->isEmpty() then
result.append(iterator)
else
let position : Integer = result->indexOf (
result->select (item | body (item) > body (iterator)) ->first() )
in
result.insertAt(position, iterator)
endif
sortedBy最多只能有一个迭代器变量。